Java 有没有什么办法可以;齐平;内线?

Java 有没有什么办法可以;齐平;内线?,java,string,memory-management,string-interning,Java,String,Memory Management,String Interning,出于性能原因,我正在使用一个使用String.intern()的外部库。这很好,但我在给定的运行中多次调用该库,因此我遇到了可怕的问题 java.lang.OutOfMemoryError:PermGen空间 显然,我可以使用JVM命令行-XX:MaxPermSize修饰符,但该解决方案的可伸缩性不强。相反,是否有任何方法可以定期(在两个“批处理”库调用之间)“刷新”内部字符串池,即清空string类持有的字符串静态表?否。只需适当调整permgen的大小即可。必须适当地调整堆的大小没有什么不同

出于性能原因,我正在使用一个使用String.intern()的外部库。这很好,但我在给定的运行中多次调用该库,因此我遇到了可怕的问题

java.lang.OutOfMemoryError:PermGen空间


显然,我可以使用JVM命令行
-XX:MaxPermSize
修饰符,但该解决方案的可伸缩性不强。相反,是否有任何方法可以定期(在两个“批处理”库调用之间)“刷新”内部字符串池,即清空string类持有的字符串静态表?

否。只需适当调整permgen的大小即可。必须适当地调整堆的大小没有什么不同。不要害怕

进一步调查后,我发现,这似乎证明了托管字符串仍然是垃圾收集的。我想这意味着我这里的问题更深——我使用的库必须仍然保留对这些字符串的活引用:(

我想“罚款”的定义需要重新评估:p@pst是的:)我的意思是,这些字符串被拘留有很好的理由,足够好,我不想在每次调用后“刷新”该表,或者完全阻止内部调用-我只想在每次“批”调用后刷新它,这样在每个批中库仍然可以享受以前调用的内部调用。奇怪的是-读一句谚语,现代JVM将gc内部调用字符串。也许你保留了很多对未使用的字符串对象的引用?你就不能。。有点像是把你所有的参考文献都杀掉,然后“重新开始”每一批。如果我读对了,GC应该为“旧的”内部字符串启动,您可能会很高兴?@Nanne该库大量使用静态变量(不寒而栗)。它为它们提供了一个很好的
reset()
函数,我依赖它,但我想它是不完整的。bummer;)有趣的文章;)