Программно заполнить область памяти JVM Permanent Generation (PermGen) - PullRequest
10 голосов
/ 21 марта 2012

Мне нужно протестировать некоторые сценарии мониторинга JMX, которые я разработал. В частности, я хотел бы проверить, работает ли мой мониторинг региона PermGen.Поэтому, чтобы проверить это, я хотел бы иметь возможность запустить небольшой код, который загружает значительное количество классов для использования PermGen.

Мой текущий план - написать скрипт для генерации prefix(1..n).javaскомпилируйте их, а затем выполните команду:

for( int i=1 ; i < n ; i ++){
    Class.forName("com.mypackage.prefix"+i);
}

Есть ли более элегантное решение для достижения этой цели?

1 Ответ

10 голосов
/ 21 марта 2012

ОК, похоже, что String.intern () поможет.Вот одна реализация, которую я нашел.Кредиты также идут в Гарет:

public static void main(String[] args) throws ClassNotFoundException {
    int i = 0;
    StringBuilder sb = new StringBuilder("a");
    for (i = 0; i < 20; i++) {
        sb.append(sb.toString());
    }
    System.err.println(sb.length());
    i = 0;
    Set<String> strings = new HashSet<String>();
    while (true) {
        strings.add(sb.append(i++).toString().intern());
        System.err.println(i);
    }
}
...