加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 如何增加FinalizerThread在GC中收集对象的优先级

发布时间:2020-12-14 19:16:46 所属栏目:Java 来源:网络整理
导读:我用profiler监视我的java应用程序以了解内存泄漏.而且我上课了几乎80%的内存 java.lang.ref.Finalizer 然后我谷歌上面的课程,发现很棒的文章 http://www.fasterj.com/articles/finalizer1.shtml 现在任何人都可以建议我如何增加FinalizerThread的优先级来

我用profiler监视我的java应用程序以了解内存泄漏.而且我上课了几乎80%的内存

java.lang.ref.Finalizer

然后我谷歌上面的课程,发现很棒的文章
http://www.fasterj.com/articles/finalizer1.shtml

现在任何人都可以建议我如何增加FinalizerThread的优先级来收集GC中的那些对象.

我在Linux上使用内核版本Linux 2.6.9-5.ELsmp(i386)和Linux 2.6.18-194.17.4.el5(i386)时遇到此问题还有一件事,但它在Linux 2.6上工作正常(没有OOM错误) .18-128.el5PAE(i386).

这个问题是因为Linux Kernels吗?
是否有任何JVM变量来改善FinalizerThread的优先级?

Thanx提前.

最佳答案
要从字面上回答这个问题,你可以做到这一点.然而,如下所述,它可能毫无意义,特别是因为线程已经具有高优先级.

for(Thread t: Thread.getAllStackTraces().keySet())
    if (t.getName().equals("Finalizer")) {
        System.out.println(t);
        t.setPriority(Thread.MAX_PRIORITY);
        System.out.println(t);
    }

版画

Thread[Finalizer,8,system]
Thread[Finalizer,10,system]

除非您使用100%的所有核心或接近它,否则优先级无关紧要,因为即使是最低优先级也会获得所需的CPU.

注意:在Linux上,它将忽略提升的优先级,除非您是root用户.

相反,你应该减少终结者正在做的工作.理想情况下,它不应该有任何事情要做.终结器中高负载的一个原因是创建应该关闭但被丢弃的资源. (让终结器关闭资源)

简而言之,您应该尝试确定正在最终确定哪些资源,并确保在调用finalize()时不需要执行任何操作,理想情况下根本不使用此方法.

在较旧版本的Linux内核上,资源可能需要稍微长一点才能关闭.我会检查硬件是否相同,因为这可能意味着清理资源需要更长的时间. (但真正的解决方法是确保它不需要这样做)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读