С какими параметрами GC JVM работает?

Благодаря thetalkingwalnut с ответом пакетная команда (команды) Windows для чтения первой строки из текстового файла я предложил следующее решение:

@echo off
for /f "delims=" %%a in ('type sample.txt') do (
echo %%a
exit /b
)

18
задан Community 23 May 2017 в 11:48
поделиться

4 ответа

Ознакомьтесь с HotSpotDiagnosticMBean

В следующем примере будет распечатано значение параметра, а также его значение DEFAULT или VM_CREATION:

import java.lang.management.ManagementFactory;

import javax.management.ObjectName;
import javax.management.openmbean.CompositeData;
import javax.management.openmbean.CompositeDataSupport;

public class HotSpotTest {

    public static void main(String [] args) throws Exception {
        printHotSpotOption("MaxHeapFreeRatio");
        printHotSpotOption("SurvivorRatio");
        printHotSpotOptions();
    }

    private static void printHotSpotOption(String option) throws Exception {
        ObjectName name = new ObjectName("com.sun.management:type=HotSpotDiagnostic");
        String operationName = "getVMOption";
        Object [] params = new Object [] {option};
        String [] signature = new String[] {String.class.getName()};
        Object result = ManagementFactory.getPlatformMBeanServer().invoke(name, operationName, params, signature);
        CompositeDataSupport data = (CompositeDataSupport) result;

        System.out.println(option);
        System.out.println("- Value: "+data.get("value"));
        System.out.println("- Origin: "+data.get("origin"));
    }

    private static void printHotSpotOptions() throws Exception {
        ObjectName name = new ObjectName("com.sun.management:type=HotSpotDiagnostic");
        String attributeName = "DiagnosticOptions";
        Object result = ManagementFactory.getPlatformMBeanServer().getAttribute(name, attributeName);
        CompositeData [] array = (CompositeData[]) result;
        for (CompositeData d : array) {
            System.out.println(d.get("name"));
            System.out.println("- Value: "+d.get("value"));
            System.out.println("- Origin: "+d.get("origin"));
        }
    }
}
18
ответ дан 30 November 2019 в 06:19
поделиться

Для этого можно использовать JMX. Запустите JConsole, и он должен отображаться на вкладке Сводка ВМ . Он должен отображать все аргументы, которые были переданы JVM.

Чтобы сделать это программно, вы можете обратиться к другому ответу SO: Как получить аргументы vm изнутри приложения java?

0
ответ дан 30 November 2019 в 06:19
поделиться

Если вы ищете быстрый и простой инструмент, читаемый человеком, jconsole может быть вам здесь. В частности, я просматриваю вкладку «Сводка виртуальной машины» в моем текущем запущенном процессе FindBugs и вижу следующие детали:

Текущий размер кучи: 788 720 кбайт

Максимальный размер кучи: 932 096 кбайт

Выделенная память: 923 648 кбайт

Ожидает завершения: 0 объектов

Сборщик мусора: Name = 'PS MarkSweep', Collections = 324, Общее затраченное время = 12 минут

Сборщик мусора: Name = 'PS Scavenge', Collections = 1132, Total потраченное время = 1 минута

Очевидно, что jvisualvm предоставит вам соответствующие подробности, но, похоже, он не так сильно ориентирован на ваши конкретные потребности (например, быстро читаемые сведения о сборщике мусора).

0
ответ дан 30 November 2019 в 06:19
поделиться

В идеале, я хотел бы увидеть, какие значения различных параметров -XX, связанных с сборщиком мусора, используются автоматически, как они выбираются виртуальной машиной. Если бы у меня было это, я мог бы начать настройку.

Обычно не так-то просто вывести точную конфигурацию кучи только из предоставленных флагов командной строки.

Если вам нужно знать конфигурацию кучи, и вы находитесь в среде, отличной от Windows, вы можете использовать jmap -heap , как описано в этой записи блога .

Вот пример предоставленной информации:

    using parallel threads in the new generation.
    using thread-local object allocation.
    Concurrent Mark-Sweep GC

    Heap Configuration:
       MinHeapFreeRatio = 40
       MaxHeapFreeRatio = 70
       MaxHeapSize      = 1073741824 (1024.0MB)
       NewSize          = 268435456 (256.0MB)
       MaxNewSize       = 268435456 (256.0MB)
       OldSize          = 805306368 (768.0MB)
       NewRatio         = 7
       SurvivorRatio    = 6
       PermSize         = 21757952 (20.75MB)
       MaxPermSize      = 88080384 (84.0MB)
7
ответ дан 30 November 2019 в 06:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: