没有垃圾回收的JVM

H-H*_*H-H 17 java garbage-collection jvm

我在很多线程中都读过,不可能在Sun的JVM上关闭垃圾回收.但是,出于我们研究项目的目的,我们需要这个功能.任何人都可以推荐一个没有垃圾收集或允许关闭它的JVM实现吗?谢谢.

Ste*_*n C 16

我想找到一种快速的方法来将所有对象保存在内存中,以获得简单的初始概念证明.

执行此操作的简单方法是使用非常大的堆运行JVM,以至于GC永远不需要运行.将-Xmx -Xms选项设置为较大的值,并打开GC日志记录以确认GC在测试期间未运行.

这比修改JVM更快,更直接.


(事后看来,这可能行不通.我模糊地回忆起看到的证据表明JVM并不总是尊重-Xms设置,特别是如果它真的很大.但是,在尝试更难的方法之前,这种方法值得尝试......比如修改JVM.)

而且,对于你实际想要达到的目标而言,这一切对我来说都是不必要的(甚至适得其反).GC不会丢弃对象,除非它们是垃圾.如果它们是垃圾,你将无法使用它们.具有GC禁用/否定的系统的性能不会指示真实应用程序将如何执行.


aio*_*obe 8

根据您的需要,这可能会起作用:

使用-Xbootclasspath选项,您可以指定自己的API类实现.然后,您可以例如覆盖Object的实现,并添加到构造函数,globalList.add(this)以防止对象被垃圾回收.这肯定是一个黑客,但对于简单的案例研究,它可能已经足够了.

另一种选择是采用开源jvm并注释掉启动垃圾收集的部分.我猜它并不复杂.

  • 好点子.一个简单的globalList.add(this)可能会导致无限递归.你将不得不做更多的切肉刀.例如,您可以实现自己的列表结构,该列表结构不会插入列表中. (2认同)