当前位置: 首页 > 面试题库 >

如何在不首先进行垃圾收集的情况下在Java 5上进行堆转储?

经炜
2023-03-14
问题内容

我们有一个运行Java
5的长期运行的服务器应用程序,对其进行分析,我们可以看到随着时间的流逝,旧的一代增长缓慢。它已在完整的GC上正确释放,但我希望能够使用堆转储查看Eclipse
MAT中无法访问的对象。我已经使用+ XX:HeapDumpOnCtrlBreak成功获得了堆转储,但是JVM总是在转储堆之前执行GC。显然,在Java
6上不会发生这种情况,但目前我们只在5上停留。有什么办法可以防止这种情况?


问题答案:

我建议使用第三方分析器,例如YourKit,它可以使您无需先启动GC即可拍摄快照。增加的好处是,您可以拍摄快照而无需整个ctrl-
break恶作剧。



 类似资料:
  • 问题内容: 有人可以解释一下G1垃圾收集器的工作原理吗?我还无法在任何地方找到任何全面,易于理解的描述。 谢谢 问题答案: 收集器将堆分成固定大小的区域,并跟踪这些区域中的实时数据。它将一组指针(“记住的集”)保留在区域内和区域外。当认为有必要使用GC时,它将首先收集实时数据较少的区域(因此,“垃圾优先”)。通常,这意味着一步就可以收集整个区域:如果进入一个区域的指针数量为零,则无需对该区域进行标

  • 在下面的代码中,假设调用了。最初引用的对象在哪一点/哪一行符合垃圾收集的条件? 如果或有一个公共、受保护、默认或静态的访问修饰符,它会影响对象在什么点上有资格进行垃圾收集吗?如果是,它会受到什么影响? 我的第一个想法是,当测试对象有资格进行垃圾收集时,该对象有资格进行垃圾收集

  • 问题内容: 我很好奇嵌套函数的node.js模式如何与v8的垃圾收集器一起工作。这是一个简单的例子 如果restofprogram是长时间运行的,那是否不意味着str将永远不会被垃圾回收?我的理解是,使用结点,您最终会获得很多嵌套函数。如果在外部声明了restofprogram,是否会收集垃圾,因此str不能在范围内?这是推荐做法吗? 编辑 我不想使问题复杂化。那只是粗心,所以我修改了它。 问题答

  • 然而,我注意到VisualVM将在堆转储之前执行完整的GC,这将清理旧的Gen,在这种情况下,堆转储将是无用的。 我还尝试使用以下命令: jmap-dump:live,format=b,file=heap.bin

  • 我有一个非常大的不可变的密钥集,不适合存储在内存中,还有一个更大的引用列表,必须只扫描一次。如何在RAM中完成标记阶段?我确实有一个可能的解决方案,稍后我会写下来作为答案(不想破坏它),但也许还有其他我没有想到的解决方案。 我将试图重申这个问题,使其更“真实”: 你在Facebook工作,你的任务是找出哪些用户从未创建过带有表情符号的帖子。你所拥有的只是活动用户名列表(大约20亿),以及帖子列表(

  • 在linux上,我似乎通过使用一些多线程来打破。就我所见,我正在设法在一个不是主GUI线程的线程上触发垃圾收集。这导致在实例,它试图从错误的线程调用堆栈,在linux上造成混乱。 下面的代码是我能想到的最小的例子。请注意,我没有使用做任何真正的工作,但是我不能以其他方式触发问题。上的方法验证正在从另一个线程中删除实例。典型输出为: 通过修改库代码,我可以验证是从与相同的地方调用的。 我的结论正确吗