Виртуальная машина Java поддерживает несколько стратегий сборки "мусора".
Эта статья объясняет их.
Теперь я задаюсь вопросом, который (автоматически выбранный) стратегия, которую мое приложение использует, там какой-либо путь, состоит в том, чтобы позволить JVM (версия 1.6) печать эта информация?
Править: JVM обнаруживает, если это находится в режиме сервера или клиенте. Таким образом, вопрос действительно состоит в том, как я могу видеть, который был обнаружен?
http://java.sun.com/j2se/1.5.0/docs/guide/vm/gc-ergonomics.html , который применим для J2SE 6, также указывает, что по умолчанию используется параллельный сборщик.
Мы протестировали это один раз на JVM 1.5, установив только
-server -Xms3g -Xmx3g -XX:PermSize=128m -XX:LargePageSizeInBytes=4m -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps
, и результат показал
41359.597: [GC [PSYoungGen: 90499K->32K(377344K)] 268466K->181862K(2474496K), 0.0183138 secs] 41359.615: [Full GC [PSYoungGen: 32K->0K(377344K)] [PSOldGen: 181830K->129760K(2097152K)] 181862K->129760K(2474496K) [PSPermGen: 115335K->115335K(131072K)], 4.4590942 secs]
, где PS означает параллельную очистку
jmap -heap
Печатает сводку кучи. Распечатывается используемый алгоритм GC, конфигурация кучи и использование кучи с учетом поколения.
http://java.sun.com/javase/6/docs/technotes/tools/share/jmap.html
Как уже отметил Йоахим, статья, на которую вы ссылаетесь, описывает стратегии VM, предлагаемые Sun's VM. Сама спецификация VM не предписывает конкретных алгоритмов GC, и поэтому не имеет смысла иметь, например, перечисляемые значения для них в API.
Однако вы можете получить некоторую информацию из Management API:
List<GarbageCollectorMXBean> beans =
ManagementFactory.getGarbageCollectorMXBeans();
Перебирая эти бобы, вы можете получить имя GC (хотя только в виде строки) и имена пулов памяти, которыми управляют различные GC.