[英]Domino JVM memory and POI
我有一個代理,它使用 Apache POI 將筆記文檔導出到 excel (xlsm)。 我正在通過使用 recycle() 或將對象設置為 null 來遵循各種可能的方法來釋放內存。但是,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();
我去年就這個問題開設了一個 PMR。 IBM 的回答如下:
我想通知您,這是一個已知的限制,將 jar 文件附加到代理或腳本庫。 請參閱以下報告該問題的一些 SPR:
SPR # BHUY8VML6R:“僅當 Jar 文件附加到數據庫中的代理時,客戶才會遇到持續的內存泄漏”
SPR # BHUY8PRMKK:“當使用附加的 Jar 文件到代理或腳本庫時,Java 內存泄漏。”
SPR # JSHN83MMMW:“帶有附加 JAR 文件的 Java 代理中的內存泄漏”
唯一可用的解決方法如下:從 Java 代理的項目中刪除 JAR 文件並將其放置在 jvm/lib/ext 文件夾中或通過 notes.ini 參數 JavaUserClasses 引用它。”
我知道這不是你想聽到的……但這些都是事實。 從那以后,我盡可能地使用 OSGi 插件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.