方式一
Object obj = new Object();
比如
public void test() {
for (int i = 0; i < 100; i++) {
Object obj = new Object();
}
}
写在100个循环内,等于你有100个引用,对应了100个对象
所以,100个对象在一段时间内,都是会占用内存
直到内存不足GC主动回收
方式二
obj = new Object();
比如
public void test() {
Object obj=null;
for (int i = 0; i < 100; i++) {
obj = new Object();
}
}
写在100个循环外,等于使用1个引用,分别100次,调用了100个对象
所以,当后一个对象init后,前一个对象已经是无引用状态,会很快的被GC自动回收
在循环还未结束时,可能已经进行了多次GC回收
区别
Object obj=null;
相当于
Object obj;
只在栈中创建一个变量
无指向的对象,在堆中不分配内存
Object obj=new Object();
相当于
Object obj;
obj = new Object();
栈中创建一个变量,在堆中给他分配内存
创建了一个对象,变量指向这个对象
栈区,主要是存放引用
堆区,主要是存放真实的数据