Как обнаружить свободную память PermGen - PullRequest
1 голос
/ 02 ноября 2011

Каков наилучший способ выяснить текущее использование PermGen в приложении Grails?

Я пытаюсь сделать некоторые графики

Runtime.getRuntime () FreeMemory ().

Runtime.getRuntime () TotalMemory ();.

И я также хотел бы измерить свободное пространство PermGen. Большинство результатов поисковой системы + переполнения стека по этому вопросу относятся к обработке ошибок, подобных PermGenOutOfMemory, я просто хотел бы получить статистику по ним.

Ответы [ 3 ]

3 голосов
/ 02 ноября 2011

Просто подключитесь к нему с помощью JConsole или VisualVM .Нет никакого способа для вас программно определить размер PermGen в вашем приложении.Вы можете использовать MemoryMXBean для создания простых отчетов о памяти, но придерживайтесь инструментов, которые я упоминал, чтобы получить более детальную картину.

1 голос
/ 14 ноября 2012

Полагаю, вам стоит попробовать это

public class Main {
    public static void main(final String[] args) {
        final RuntimeMXBean memMXBean = ManagementFactory.getRuntimeMXBean();
        final String prefix = "-XX:MaxPermSize=";
        final List<String> jvmArgs = memMXBean.getInputArguments();
        String maxPermSize = null;
        for (final String jvmArg : jvmArgs) {
            if (jvmArg.startsWith(prefix)) {
                maxPermSize = jvmArg.substring(prefix.length());
                break;
            }
        }

        System.out.println("MaxPermSize is " + maxPermSize);
    }
}
0 голосов
/ 02 ноября 2011

Я думаю, ManagementFactory может быть источником, один из пулов, возвращаемых из List getMemoryPoolMXBeans () , должен быть PermGen.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...