今天逛脉脉,看见匿名区有人说java中把对做置null,这种做法很菜,不能加速垃圾回收,但是我看到就觉得呵呵了,我是觉得可以加速置null对象回收的。

测试的过程中,费劲的是要指定一个合理的测试堆大小,然而针对的JDK不同版本不同,指定的堆大小也不同,测试出的效果有些不同,报的内存堆栈错误信息不一致,但是可以验证把对象置null,是能加速垃圾回收的。

本测试程序测试在jdk7的基础上。

1. 设定堆的大小信息,及GC打印信息

-Xms2M -Xmx3M -XX:PermSize=2M -XX:MaxPermSize=4M -XX:+PrintGCTimeStamps -XX:-PrintClassHistogram -  XX:+PrintHeapAtGC -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCApplicationStoppedTime - XX:+HeapDumpOnOutOfMemoryError

2.在main方法中模拟出一个占内存很大的list对象,至少保证运行方法中单个list的大小不会挤爆内存

public class TestGC {

	public static void main(String[] args) throws InterruptedException {
List<String> list= new ArrayList<String>();
for (int i = 0; i < 100000; i++) {
String a = new String("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
list.add(a);
}
} }

调整堆的大小,保证运行不会报错堆栈溢出错误,接着看下面的代码

public class TestGC {

	public static void main(String[] args) throws InterruptedException {

		List<String> list= new ArrayList<String>();
for (int i = 0; i < 100000; i++) {
String a = new String("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
list.add(a);
}
//list =null;
Thread.sleep(1000); List<String> list2= new ArrayList<String>();
for (int i = 0; i<100000; i++) {
String a = new String("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
list2.add(a);
}
//list2 =null;
Thread.sleep(1000); List<String> list3= new ArrayList<String>();
for (int i = 0; i < 100000; i++) {
String a = new String("cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc");
list3.add(a);
}
//list3 =null;
Thread.sleep(1000); List<String> list4= new ArrayList<String>();
for (int i = 0; i<100000; i++) {
String a = new String("dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd");
list4.add(a);
}
//list4 =null;
Thread.sleep(1000); List<String> list5= new ArrayList<String>();
for (int i = 0; i < 100000; i++) {
String a = new String("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee");
list5.add(a);
}
//list5 =null;
Thread.sleep(1000); List<String> list6= new ArrayList<String>();
for (int i = 0; i<100000; i++) {
String a = new String("fffffffffffffffffffffffffffffffffffffffffffffffffffffffff");
list6.add(a);
}
//list6= null;
System.out.println("ÔËÐгɹ¦¡£");
} }

运行中内存溢出了,错误信息如下

3. 见证奇迹的时刻到了,看看到底有木有用,把代码中的注释放开

  

  

最新文章

  1. ubuntu 14.04安装pypcap
  2. JAVA类图
  3. bzoj4381: [POI2015]Odwiedziny
  4. 【设计模式六大原则2】里氏替换原则(Liskov Substitution Principle)
  5. 转载CSDN (MVC WebAPI 三层分布式框架开发)
  6. 查看某一个点是否在某个多边形内 使用ST_Contains函数
  7. iptables网络安全服务详细使用
  8. vi代码智能提示功能及相关配置
  9. BZOJ_2527_[Poi2011]Meteors_整体二分
  10. 分享收集的WebGL 3D学习资源
  11. sql server 查询所有表结构
  12. CORS在Spring中的实现
  13. 网络编程基础【day09】:解决socket粘包之大数据(七)
  14. svn的常用命令
  15. Jmeter脚本录制方法(二)手工编写脚本(jmeter与fiddler结合使用)
  16. delphi inttohex 整型到十六进制
  17. day24类的继承
  18. java-代码生成器
  19. Kubernetes的ConfigMap说明
  20. MemSQL 架构初探

热门文章

  1. 转载 Flask中客户端 - 服务器 - web应用程序 是如何处理request生成response的?
  2. 【jQuery】(2)---Jquery过滤选择器
  3. MySQL+MGR 单主模式和多主模式的集群环境 - 部署手册 (Centos7.5)
  4. solr查询工作原理深入内幕
  5. NET Core微服务之路:弹性和瞬态故障处理库Polly的介绍
  6. CC2530微处理器接口开发技术——信号灯的设计与实现
  7. SHELL脚本--多命令逻辑执行顺序
  8. 学会这个删库再也不用跑路了~ --技术流ken
  9. [转]windows 10 搭建angular开发环境
  10. [转]VirtualBox安装CentOS7