Программно заполнить область памяти JVM Permanent Generation (PermGen)
Мне нужно протестировать некоторые сценарии мониторинга JMX, которые я разработал. В частности, я хотел бы проверить, работает ли мой мониторинг области PermGen. Поэтому, чтобы проверить это, я хотел бы иметь возможность запускать немного кода, который загружает значительное количество классов, чтобы потреблять PermGen.
Мой текущий план состоит в том, чтобы написать script для сгенерирования prefix(1..n).java
скомпилировать их, а затем в режиме запуска:
for( int i=1 ; i < n ; i ++){
Class.forName("com.mypackage.prefix"+i);
}
Есть ли более элегантное решение для достижения этого?
Ответы
Ответ 1
ОК, так что выглядит 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);
}
}