有没有办法“冲洗”实习字符串?

时间:2011-01-15 09:12:29

标签: java string memory-management string-interning

我正在使用一个外部库,它出于性能原因使用String.intern()。那没关系,但是我在给定的运行中调用了很多库很多,所以我遇到了可怕的

  

java.lang.OutOfMemoryError:PermGen space

显然我可以使用JVM命令行-XX:MaxPermSize修饰符,但该解决方案的可扩展性不高。相反,有没有办法定期(在两个“批次”的库调用之间)“刷新”实习字符串池,即清空String类所持有的字符串的静态表?

2 个答案:

答案 0 :(得分:3)

没有。只需适当调整permgen的大小。必须适当地调整堆大小没有什么不同。别害怕!

答案 1 :(得分:3)

进一步调查,我发现this article,这似乎表明被拦截的字符串仍然是垃圾收集的。我想这意味着我的问题在于更深层次 - 我使用的库必须仍然保留对这些字符串的生动引用:(