java 释放静态对象_java静态类new的对象是否能被回收?

问题来自一个线上GC频繁的应用,观察到老年代一直gc下不去导致应用被gc STW卡主假死,检查代码发现这样一段代码,感觉可疑

代码如下:

public class WriteEsWork {

public static void write(List esList, String index, ESClusterEnum cluster, Worker worker) {

execServer.submit(new WriteESRunnable(esList, index, cluster, worker));

}

private static class WriteESRunnable implements Runnable {

private List esList;

...

}

}

jmap查到WriteESRunnable 这个对象有不少8000多个,一个对象等于一个线程,EsIndexInfo这个对象也很多。

问题:WriteESRunnable 是一个静态内部类,这个类只会在静态方法write被调用的时候 new对象到线程池,那么当这个线程执行完成后,WriteESRunnable 对象会被释放吗?还是因为他是内部静态类会一直保留引用?

如果不释放就说明确实是因为这个问题导致WriteESRunnable 和EsIndexInfo对象堆积太久。

如果释放的话 那就是另一种可能 线程再线程池等待队列堆积的太多了。

还请朋友们帮忙分析!谢谢

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值