我有一个代理,它使用Apache将notes文档导出到excel (xlsm)。我遵循每一种可能的方式释放内存,使用循环()或将对象设置为null.However,JVM仍然超出堆大小并抛出“出内存”错误。这里有更多的信息,
另一件我正在观察但无法理解的事情是JVM是如何使用/释放内存的。例如,我在代码开始之前和代码结束后使用以下代码打印“可用”内存,
Runtime runtime = Runtime.getRuntime();
double usedMemory = usedMemory(runtime);
System.out.println("START - Initial memory :: " + String.valueOf(usedMemory) )
static double usedMemory(Runtime runtime) {
long totalMemory = runtime.totalMemory();
long freeMemory = runtime.freeMemory();
double usedMemory = (double)(totalMemory - freeMemory) / (double)(1024 * 1024);
return usedMemory;
}
当我第一次测试我的经纪人时,
JVM启动:可用初始内存: 60 MB JVM端:已使用内存: 90 MB
第二次当探员开始打印时,
JVM启动:可用初始内存: 130 MB JVM端:使用内存: 160 MB
即使我在代码的末尾释放内存,我看到它并不是初始内存( 60 MB )?
/* Free up memory */
webDoc.recycle();
docA.recycle();
vwLookup.recycle();
curDb.recycle();
session.recycle();
agentContext=null;
fpath.delete();
xlFile.delete();
runtime = Runtime.getRuntime();
usedMemory = usedMemory(runtime);
System.out.println("END - MAIN :: Total used memory: " + String.valueOf(usedMemory) );
freeMemory();
发布于 2017-10-25 08:30:26
我在去年开了一个关于这个问题的PMR。IBM的回答如下:
我想告诉您,这是一个已知的限制,将jar文件附加到代理或脚本库中。见下文报告这一问题的一些特别方案审查: SPR # BHUY8VML6R:“只有当Jar文件附加到数据库中的代理时,客户才会遇到内存泄漏” BHUY8PRMKK#:“当使用附加的Jar文件到代理或脚本库时,Java内存泄漏。” SPR # JSHN83MMMW:“带有附加JAR文件的Java中的内存泄漏” 唯一的解决办法是:从Java的项目中删除JAR文件,并将其放在jvm/lib/ext文件夹中,或者通过notes.ini参数JavaUserClasses引用它。“
我知道这不是你想听的.但这些都是事实。从那时起,我尽可能地使用OSGi插件。
https://stackoverflow.com/questions/46491916
复制相似问题