有没有办法查看JVM中哪些特定对象(eden,old等)中的特定对象?我试图找出一种方法来确定究竟哪些对象存在问题。我正在使用JProfiler,记录内存会告诉你任何时间点的实时和GCed对象,但不会告诉你对象所在的几代。还有其他工具可以告诉你吗?我似乎也找不到任何这样的GC调试选项。
另一方面,使用JProfiler记录内存似乎在应用程序上有太多开销,所以要么我无法记录内存很长时间(快速达到峰值内存),或者开销会以某种方式干扰/影响应用程序行为。另外,记录内存。对此提出任何建议(我是否缺少开关以避免这种情况)?我一般都是动态仪表选项,但据我记得的几次我使用Sampling也有同样的效果。
答案 0 :(得分:0)
yourkit能够做你想做的事。更准确地说,您可以看到次要和主要的垃圾收集。
<强> 编辑: 强> SO的一些人同意我的看法。 Which Java profiler is better: JProfiler or YourKit?
答案 1 :(得分:0)
启用jvm标志以打印GC: -XX:-PrintGCDetails在垃圾收集中打印更多细节。管理。 (在1.4.0中引入。)
您可以做的另一件事是使用可视GC插件使用JVisualVM(在jdk1.6中构建它): http://visualvm.java.net/plugins.html