gpt4 book ai didi

Java:您如何真正使用 JVMTI 的 ForceGargabeCollection 强制 GC?

转载 作者:IT老高 更新时间:2023-10-28 20:35:41 28 4
gpt4 key购买 nike

我不是在寻找通常的“您只能使用 System.gc() 在 Java 中提示 GC”的答案,这根本不是这个问题的意义所在。

我的问题不是主观的,而是基于一个现实:GC 可以在 Java 中被强制用于一个事实。我们每天使用的很多程序都可以做到这一点:IntelliJ IDEA、NetBeans、VisualVM。

它们都可以强制 GC 发生。

它是如何完成的?

我认为他们都在使用 JVMTI,更具体地说,是 ForceGarbageCollection(注意“Force”),但我该如何自己尝试呢?

http://java.sun.com/javase/6/docs/platform/jvmti/jvmti.html#ForceGarbageCollection

还要注意,这个问题不是关于“为什么”我想这样做:“为什么”可能是“好奇”或“我们正在编写类似于 VisualVM 的程序”等。

问题实际上是“如何使用 JVMTI 的 ForceGarbageCollection 强制 GC”?

JVM 是否需要使用任何特殊参数启动?

是否需要任何 JNI?如果有,具体是什么代码?

它只适用于 Sun 虚拟机吗?

欢迎提供任何完整且可编译的示例。

最佳答案

NetBeans 至少使用 System.gc():http://hg.netbeans.org/main/annotate/9779f138a9c9/openide.actions/src/org/openide/actions/GarbageCollectAction.java (这是用于显示当前堆并让您启动 GC 的小按钮)。如果您点击该链接,您会看到他们明确运行终结器。如果您有一些可用的磁盘空间,并且想自己研究代码,可以通过 Mercurial 获得它:hg clone http://hg.netbeans.org/main/

据我所知,“System.gc() 只是一个提示”教条源于对 JLS 和 JVM 规范的迂腐解释,它允许没有垃圾收集堆的 Java 实现。那,以及对 JavaDoc 的不完整阅读:

Calling the gc method suggests that the Java Virtual Machine expend effort toward recycling unused objects in order to make the memory they currently occupy available for quick reuse. When control returns from the method call, the Java Virtual Machine has made a best effort to reclaim space from all discarded objects.

阅读第二句:“尽最大努力回收空间”比“提示”强很多。

也就是说,很少有理由调用 System.gc()。向 Knuth 道歉:

We should forget about memory management, say about 97% of the time: explicit garbage collection is the root of all evil

关于Java:您如何真正使用 JVMTI 的 ForceGargabeCollection 强制 GC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2178296/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com