【发布时间】:2011-01-15 09:12:29
【问题描述】:
出于性能原因,我正在使用一个使用 String.intern() 的外部库。这很好,但是我在给定的运行中很多调用了那个库,所以我遇到了可怕的
java.lang.OutOfMemoryError: PermGen 空间
显然我可以使用 JVM 命令行 -XX:MaxPermSize 修饰符,但该解决方案的可扩展性不是很好。相反,有没有办法定期(在两个“批次”库调用之间)“刷新”实习字符串池,即清空 String 类持有的静态字符串表?
【问题讨论】:
-
我想“好”的定义需要重新评估:p
-
@pst yea :) 我的意思是这些字符串是有充分理由的,足够好,我不想在每次调用后“刷新”该表,或者完全阻止实习 -我只想在每次“批次”调用后刷新它,以便在每个批次中,库仍然可以享受先前调用的实习。
-
奇怪 - 只是读到 article 说,现代 JVM 将 gc 实习字符串。也许您保留了对未使用的 String 对象的许多引用?
标签: java string memory-management string-interning