JVM实例化对象

方式一

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();
栈中创建一个变量,在堆中给他分配内存
创建了一个对象,变量指向这个对象

栈区,主要是存放引用
堆区,主要是存放真实的数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值