VisualVM 怎么实现的强制执行GC?

绝望的八皮 发布于 2012/11/04 23:24
阅读 13K+
收藏 0
我所了解的在api层面是不能强制gc的,这个玩意儿是怎么做到的?有高人知道么?
加载中
0
逝水fox
逝水fox

说不能保证马上执行太夸大了,虽然也不算错。API文档上的说法是虚拟机会做些努力来尝试回收,但不保证有结果。

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.
简单的测试方法,你可以自己写个MBean开放一个gc方法,作用就是直接调用System.gc对比JDK自带的MBean看下效果。

0
逝水fox
逝水fox

他也没有强制gc,其实就是执行了一下System.gc()。

参见java.lang.management.MemoryMXBean 这个接口的gc方法的说明。

0
绝望的八皮
绝望的八皮
该评论暂时无法显示,详情咨询 QQ 群:点此入群
0
xpbug
xpbug

GC在JVM里面是一个单独的守护线程,它的优先级非常低,虽然GC的调用是遵从算法的,但连JVM的开发者自己都不清楚GC何时被调用.且没有强制GC方法.

0
Cavalier
Cavalier
这个怎么说呢,gc执行是随机性的,你不可能人为去强制执行,如果遇到了应该做垃圾回收而没做导致应用无法正常运行,不妨改下jvmGC策略
0
Howard.L.Huang
Howard.L.Huang

如果DisableExplicitGC没打开,可以调用System.gc()。执行System.gc();后不会立即做FullGC。

1.在VisualVM上可以借用BTrace的插件;

2.可以用jConsole工具调用System.gc();

3.MBean。

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部