Есть ли способ «очистить» интернированные строки? - PullRequest
2 голосов
/ 15 января 2011

Я использую внешнюю библиотеку, которая использует String.intern () по соображениям производительности. Это нормально, но я вызываю эту библиотеку много в данном цикле, и поэтому я сталкиваюсь с ужасной

java.lang.OutOfMemoryError: PermGen space

Очевидно, что я могу использовать модификатор командной строки JVM -XX:MaxPermSize, но это решение не очень масштабируемо. Вместо этого, есть ли способ периодически (между двумя «пакетами» библиотечных вызовов) «очищать» внутренний пул строк, то есть очищать статическую таблицу строк, содержащихся в классе String? *

Ответы [ 2 ]

3 голосов
/ 15 января 2011

Исследуя далее, я обнаружил эту статью , которая, кажется, демонстрирует, что интернированные строки все еще собираются мусором. Я предполагаю, что это означает, что моя проблема здесь более глубока - библиотека, которую я использую, должна все еще содержать живую ссылку на эти строки: (

3 голосов
/ 15 января 2011

Нет. Просто размер permgen соответственно. Это не отличается от того, чтобы правильно определить размер кучи. Не бойся!

...