Как обнаружить постоянную свободную память

#java #grails #groovy

#java #grails #groovy

Вопрос:

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

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

Runtime.getRuntime().freeMemory();

Runtime.getRuntime().totalMemory();

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

Ответ №1:

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

Комментарии:

1. Может быть, ссылка на руководство ?

2. Видите ли, я бы предпочел, если бы в приложении был способ, которым я мог бы это определить, таким образом, я мог бы просто и автоматически передавать это в базу данных для создания отчетов. Но, спасибо, MemoryMXBean выглядит как шаг в правильном направлении.

Ответ №2:

Я думаю, вы должны попробовать это

 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);
    }
}
  

Ответ №3:

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

Комментарии:

1. Я могу ошибаться здесь — но я не думаю, что PermGen сообщается.