gpt4 book ai didi

java - 导致 java.lang.OutOfMemoryError : PermGen space error 的算法

转载 作者:行者123 更新时间:2023-12-04 21:27:48 26 4
gpt4 key购买 nike

我在 Sun JVM (1.6.0_21-b06) 上遇到 PermGen 空间错误(好的,是 Oracle :))。增加选项 -XX:MaxPermGen 值无济于事。我知道 PermGen 是一个用于永久对象(如类元数据)的空间。项目中的类数不是很大 ~ 10 000。在崩溃之前,jvisualvm 显示 57MB 为 Used PermGen。

我猜某些算法占用了所有可访问的内存。有人知道导致 PermGen 溢出的算法示例吗?

UPD. 我问这样一个抽象的问题,因为此刻我无法使用任何分析器 - 代码严重崩溃以至于 jvisualvm 和 eclipse 停止响应。我需要使用 kill -KILL {process_numer} 从终端终止 java 进程。我使用组织不良(但商业)的代码,其中包含许多线程和 JMS 消息传递。调试一团糟 - 我首先需要知道去哪里查看。

最佳答案

与其说是算法,不如说是实现。这是生成填充 PermGen 空间的随机字符串的非常愚蠢的方法:

    Random rnd = new Random();
List<String> interned = new ArrayList<String>();
for (;;) {
int length = rnd.nextInt(100);
StringBuilder builder = new StringBuilder();
String chars = "abcdefghijklmnopqrstuvwxyz";
for ( int i = 0; i < length; i++ ) {
builder.append(chars.charAt(rnd.nextInt(chars.length())));
}
interned.add(builder.toString().intern());
}

简而言之:驻留字符串是会耗尽 PermGen 内存的一件事。

关于java - 导致 java.lang.OutOfMemoryError : PermGen space error 的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3855895/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com