今天逛脉脉,看见匿名区有人说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 list= new ArrayList();

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 list= new ArrayList();

for (int i = 0; i < 100000; i++) {

String a = new String("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");

list.add(a);

}

//list =null;

Thread.sleep(1000);

List list2= new ArrayList();

for (int i = 0; i<100000; i++) {

String a = new String("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");

list2.add(a);

}

//list2 =null;

Thread.sleep(1000);

List list3= new ArrayList();

for (int i = 0; i < 100000; i++) {

String a = new String("cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc");

list3.add(a);

}

//list3 =null;

Thread.sleep(1000);

List list4= new ArrayList();

for (int i = 0; i<100000; i++) {

String a = new String("dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd");

list4.add(a);

}

//list4 =null;

Thread.sleep(1000);

List list5= new ArrayList();

for (int i = 0; i < 100000; i++) {

String a = new String("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee");

list5.add(a);

}

//list5 =null;

Thread.sleep(1000);

List list6= new ArrayList();

for (int i = 0; i<100000; i++) {

String a = new String("fffffffffffffffffffffffffffffffffffffffffffffffffffffffff");

list6.add(a);

}

//list6= null;

System.out.println("ÔËÐгɹ¦¡£");

}

}

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

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

java 垃圾回收 null_java方法中把对象置null,到底能不能加速垃圾回收相关推荐

  1. java文件流null_JAVA 获取资源文件对象为NULL

    今天,写一个添加背景音乐的方法时,在导入当前文件夹下的音乐时中始终出现,以下的异常,Exception in thread "main" java.lang.NullPointer ...

  2. java 方法重载 应用举例,Java 实例 - 重载(overloading)方法中使用 Varargs

    以下实例演示了如何在重载方法中使用可变参数:/* author by w3cschool.cc Main.java */public class Main { static void vaTest(i ...

  3. Jvm处理Java Thread 的run方法中抛出异常的流程

    Jvm处理Java Thread 的run方法中抛出异常的流程 参考文章: (1)Jvm处理Java Thread 的run方法中抛出异常的流程 (2)https://www.cnblogs.com/ ...

  4. java 父类this_java父类方法中使用this,可以把this强转为子类对象,然后调用子类的实例方法,怎么解释?...

    1.代码如下 父类代码: public class A { public void a(){ B b=(B)this; System.out.println(b.getNum()); System.o ...

  5. Java Servlet(三):Servlet中ServletConfig对象和ServletContext对象

    本文将记录ServletConfig/ServletContext中提供了哪些方法,及方法的用法. ServletConfig是一个抽象接口,它是由Servlet容器使用,在一个servlet对象初始 ...

  6. Java如何在main方法中实例化内部类对象

    今天我在实例化一个类是编译器报以下错误: No enclosing instance of type Person is accessible. Must qualify the allocation ...

  7. java流的序列化_Java中的对象流和序列化介绍

    最近,在讲流的使用,其中对象流的作用其实就是将自定义类的对象与流之间相互转换的流. 看起来还是挺简单的,那么看下面的例子: public class Student{ private int id; ...

  8. 嵌入式软件开发培训笔记——Java第三天(方法重载、对象的构造与初始化过程分析、封装等)

    一.掌握方法重载(Overload)     同一个类中方法名相同时,称为方法的重载(Overload)     特点:1.参数列表不同                     1)参数类型不同   ...

  9. java ajax data_jquery ajax 方法中传递的data参数,如何在java类中获取

    展开全部 var params="username="+"1"; $.ajax({ type : "POST", //数据发送方式 url ...

最新文章

  1. HealthKit开发快速入门教程之HealthKit框架体系创建健康AppID
  2. python科学计算基础教程pdf下载-Python科学计算 PDF 第2版
  3. tcp文件上传--多个客户端
  4. 汇编对sp指针进行修改_从汇编理解函数调用的过程
  5. javascript --- 判断只有1个为真
  6. SGU185 Two shortest(最小费用最大流/最大流)
  7. 项目拖太久的巨大风险
  8. 阿里巴巴整理的python_阿里P8大佬整理的2020年最全99道python面试题,文末附答案...
  9. SQL 導入導出大全
  10. 常见Windows硬件故障
  11. 王者荣耀游戏服务器架构的演进读后感
  12. Unomi 成为 Apache 软件基金会顶级项目
  13. SSM 实现 RESTful 风格
  14. windows7安装Bitvise开启SSH服务
  15. c语言算摄氏温度和绝对温度,将华氏度转换为绝对温度C语言
  16. Ubuntu下阅读CHM格式的文档
  17. windows服务启动 1053错误
  18. python装饰器–原来如此简单
  19. Windiws10系统不显示可用网络的处理方法!
  20. 将cooledit作为一个音频信号发生器(http://www.zsjys.net/JYJY/ShowArticle.asp?ArticleID=64)

热门文章

  1. linux命令帮助怎么看,Linux命令帮助
  2. python分支语句_Python中分支语句与循环语句实例详解
  3. linux内核I2C子系统学习(二)
  4. arm B和BL指令浅析
  5. 设计模式C++实现 ——状态模式
  6. 电气技术应用和计算机应用,电气技术应用专业介绍-1.ppt
  7. url采集器_Linux「第三节」-centos7.5部署数据采集器Telegraf
  8. 【转】细说.NET中的多线程 (二 线程池)
  9. CSDN改版,找不到各种入口,链接放下面
  10. 40访问者模式(Visitor Pattern)