2011-03-03 70 views

回答

12

这将打印出当前加载到您的JVM中的所有垃圾收集器的列表。

import java.lang.management.*; 
import java.util.List; 

public class x { 
    public static void main(String args[]) { 
     List<GarbageCollectorMXBean> l = ManagementFactory.getGarbageCollectorMXBeans(); 
     for(GarbageCollectorMXBean b : l) { 
      System.out.println(b.getName()); 
     } 
    } 
} 
+0

谢谢。这帮了很多。 – user640121 2011-03-03 19:10:27

4

JConsole你在做什么?

摘录:

垃圾收集的信息:对GC的信息,包括垃圾收集器的名称,进行藏品的数量和总时间花费在执行GC。

+0

嗯,我只想知道什么时候踢java进程正在使用的垃圾回收器是什么。当我使用更新的(1.6.0_20)版本的jre时,发生OutOfMemory问题。使用旧版本(1.6.0_5)我没有看到问题。我运行的测试当然是一致的。我的猜测是,这可能与正在使用的垃圾收集器有关。我在网上搜索很多,但无法找到一种方法来告诉默认情况下,特定jre版本中使用的gc。 – user640121 2011-03-03 00:44:20

0

我认为答案是你不能直接告诉默认垃圾收集器是什么。您可以知道当前JVM中当前使用了哪些垃圾收集器,但这取决于其他因素(如JVM选项...),因此无法从中可靠地推断默认GC。

而且(不耐受@Lucas说什么),推断(可靠)的默认就是通过其他手段将难:

  • 由于@Lucas指出,缺省值取决于机器是否瀑布进入“服务器级”类别,并且在某些情况下,这取决于不可移动访问的机器的物理属性。

  • 该流程的文档不完整,不一定完全可靠。

  • 行为(“服务器级”分类,每个类的默认GC等)可能取决于Java版本。事实上,它甚至可能随JVM补丁版本而改变。

IMO,更好的方法是在启动子进程时显式设置JVM选项,而不要依赖默认值。或者,只要按照默认设置进行即可。

+0

为什么随机downvote? – 2011-03-03 03:05:38