我只是想知道是否有一种方法可以从正在 gc 的代码/JVM 中检测垃圾收集周期。
时机不起作用。因此,事件发生在实际周期之前还是之后并不重要。(在循环期间发生事件似乎极不可能,而且也可能很危险,具体取决于所使用的 GC 实现)。
我能找到的只是可以与正在运行的 JVM 并行使用的应用程序,例如 jstat:https: //dzone.com/articles/how-monitor-java-garbage以及此处的源代码,例如:https:// /github.com/eagle518/jdk-source-code/blob/master/jdk5.0_src/j2se/src/share/classes/sun/tools/jstat/Jstat.java
我所看到的是他们使用
MonitoredHost monitoredHost = MonitoredHost.getMonitoredHost(vmId);
MonitoredVm monitoredVm = monitoredHost.getMonitoredVm(vmId, interval);
Run Code Online (Sandbox Code Playgroud)
所以我的问题基于两个问题。如果第二个问题有解,我们就不需要回答第一个问题:
MonitoredVm?Runtime.getRuntime().addShutdownHook(hookThread);)?Java Reflection 也是一个受欢迎的解决方案!