java静态内部类多次实例化_(转)Java静态内部类的实例化问题

最近遇到的一个问题,记录一下。

静态内部类可以被实例化!

1.首先在外部类中的static方法中不能使用普通内部类,因为内部类必须要与外部类建立关联才能使用,可以说是同生共死。

2.我在编码过程中,需要2个类共同完成一个功能,其中一个工具类只会被用来完成这个功能,所以我选择将这个类作为内部类,但是这个内部类与外部类又没有直接的关联(使用普通内部类,我需要new一个外部类,通过外部类才能new一个内部类,这样显然不合适),所以我选择使用静态内部类。

3.关于静态内部类的对象:首先多次new是在堆中创建了不同的对象,和普通类的对象一样。我在使用的时候,主要怕多个静态内部类的对象在程序运行过程中像静态成员变量一样一直占据内存空间导致OOM,经过验证,静态内部类的对象虽然每次new都生成一个对象,但是会被及时的回收,不会因为一直占据内存空间导致OOM。

// 静态内部类

private static class AA

{

int a;

}

btn1.setOnClickListener(new OnClickListener()

{

@Override

public void onClick(View v)

{

for(int i = 0 ; i < 1000; i++)

{

// 静态内部类可以被实例化

AA a = new AA();

a.a = i;

list.add(a);

}

}

});

btn3.setOnClickListener(new OnClickListener()

{

@Override

public void onClick(View v)

{

for(int i = 0 ; i < list.size(); i++)

{

// 不为同一个对象

Log.i("aaaa", list.get(i)+"");

}

}

});

8f8b80bc5d3a908644b414669a8b5179.png

通过btn3打印的Log我们可以看到静态内部类的对象不是同一个

另外为了验证能不能及时回收,查看内存使用情况的方法:

76846ab8acc028e58311818ef28b38b6.png

data object后面的Total Size就是程序中对象占用的内存,检测内存是否合理使用,你可以打开应该,来回的操作,看看TotalSize又没有明显的增长,正常情况下,如果没有垃圾数据,内存会及时的被回收,TotalSize也就维持在相对稳定的数值,如果,一直在上涨说明你的程序就有OOM的风险了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值