VisualVM 怎么实现的强制执行GC?
我所了解的在api层面是不能强制gc的,这个玩意儿是怎么做到的?有高人知道么?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我所了解的在api层面是不能强制gc的,这个玩意儿是怎么做到的?有高人知道么?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(5)
如果DisableExplicitGC没打开,可以调用System.gc()。执行System.gc();后不会立即做FullGC。
1.在VisualVM上可以借用BTrace的插件;
2.可以用jConsole工具调用System.gc();
3.MBean。
这个怎么说呢,gc执行是随机性的,你不可能人为去强制执行,如果遇到了应该做垃圾回收而没做导致应用无法正常运行,不妨改下jvmGC策略
GC在JVM里面是一个单独的守护线程,它的优先级非常低,虽然GC的调用是遵从算法的,但连JVM的开发者自己都不清楚GC何时被调用.且没有强制GC方法.
他也没有强制gc,其实就是执行了一下System.gc()。
参见java.lang.management.MemoryMXBean 这个接口的gc方法的说明。
说不能保证马上执行太夸大了,虽然也不算错。API文档上的说法是虚拟机会做些努力来尝试回收,但不保证有结果。
简单的测试方法,你可以自己写个MBean开放一个gc方法,作用就是直接调用System.gc对比JDK自带的MBean看下效果。