java 垃圾回收 null_java方法中把对象置null,到底能不能加速垃圾回收
今天逛脈脈,看見(jiàn)匿名區(qū)有人說(shuō)java中把對(duì)做置null,這種做法很菜,不能加速垃圾回收,但是我看到就覺(jué)得呵呵了,我是覺(jué)得可以加速置null對(duì)象回收的。
測(cè)試的過(guò)程中,費(fèi)勁的是要指定一個(gè)合理的測(cè)試堆大小,然而針對(duì)的JDK不同版本不同,指定的堆大小也不同,測(cè)試出的效果有些不同,報(bào)的內(nèi)存堆棧錯(cuò)誤信息不一致,但是可以驗(yàn)證把對(duì)象置null,是能加速垃圾回收的。
本測(cè)試程序測(cè)試在jdk7的基礎(chǔ)上。
1. 設(shè)定堆的大小信息,及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方法中模擬出一個(gè)占內(nèi)存很大的list對(duì)象,至少保證運(yùn)行方法中單個(gè)list的大小不會(huì)擠爆內(nèi)存
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);
}
}
}
調(diào)整堆的大小,保證運(yùn)行不會(huì)報(bào)錯(cuò)堆棧溢出錯(cuò)誤,接著看下面的代碼
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("??DD3é1|?£");
}
}
運(yùn)行中內(nèi)存溢出了,錯(cuò)誤信息如下
3. 見(jiàn)證奇跡的時(shí)刻到了,看看到底有木有用,把代碼中的注釋放開(kāi)
總結(jié)
以上是生活随笔為你收集整理的java 垃圾回收 null_java方法中把对象置null,到底能不能加速垃圾回收的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: asp.net mvc 缓存CaChe使
- 下一篇: 苹果/AMD/NVIDIA三大客户集体砍