我們有一個PHP webapp,它調用一個java二進制文件來生成pdf報告(帶有jasperreport),java二進制outpus pdf到標準輸出和退出,然後將php發送到瀏覽器。這個java命令持續大約3到6秒,我認爲當它持續6秒時,這是因爲GC啓動了,所以我想禁用它,因爲無論如何當命令退出所有內存時都會返回。如何禁用Java垃圾收集器?
我想知道如何禁用它爲Java 1.4.2和Java 1.6.0,因爲我們目前正在測試兩個JVM,看看哪些執行得更快..
感謝
我們有一個PHP webapp,它調用一個java二進制文件來生成pdf報告(帶有jasperreport),java二進制outpus pdf到標準輸出和退出,然後將php發送到瀏覽器。這個java命令持續大約3到6秒,我認爲當它持續6秒時,這是因爲GC啓動了,所以我想禁用它,因爲無論如何當命令退出所有內存時都會返回。如何禁用Java垃圾收集器?
我想知道如何禁用它爲Java 1.4.2和Java 1.6.0,因爲我們目前正在測試兩個JVM,看看哪些執行得更快..
感謝
沒有辦法完全禁用垃圾收集。垃圾收集只在JVM空間不足時運行,因此您可以爲程序提供更多內存。添加這些命令行選項Java命令
-Xmx256M -Xms256M
這給RAM的程序的256Mb(默認爲64MB)。垃圾收集對於默認大小的JVM不會花費3秒,因此您可能想要更仔細地調查程序正在執行的操作。 Yourkit profiler對於弄清楚需要很長時間的事情非常有用。
您確定它是垃圾回收導致放緩嗎?你用-verbose:gc運行java來看看發生了什麼?
您無法禁用JVM上的垃圾回收。但是,您可以查看tuning垃圾收集器以獲得更好的性能。
您可以使用-Xmx
選項設置最大堆大小;使用更大的堆應該防止虛擬機運行內存不足,從而需要儘快進行垃圾收集。
只需設置-Xmx就不會有任何區別。您實際上也需要設置-Xms,因爲您要控制初始堆大小。 – 2010-05-28 08:14:00
聽起來好像你正在努力節省時間,但是卻以錯誤的方式前進。與啓動和關閉java進程所用的時間相比,禁用垃圾回收所節省的時間將是微不足道的(對於單個任務)。如果運行時間性能是您的目標,您可能需要考慮進行java進程啓動,您可以多次提問以執行所需的工作。
好的一個......我想,它也可以節省碧玉的初始化。 – helios 2010-05-28 08:15:20
是的,這是一個很好的方法,雖然需要做更多的工作,但我必須編寫一種守護進程來監聽套接字,等等......除了這個「守護進程」之外,還必須在X天內重新啓動一次。 (從我的經驗)泄漏內存.. – Nelson 2010-05-28 08:20:55
@Nelson考慮看看您是否可以使用像Mule這樣的東西來託管您的Java進程並讓它爲您處理所有通信。這個想法就是你只需要將你的JasperReports作爲一種服務嵌入,ESB可以根據需要將這些請求託管和路由。 Mule:http://www.mulesoft.com/mule-esb-open-source-esb – 2010-05-28 08:28:31
正如大家所說的,你不能在JVM中禁用GC,這是合理的,因爲如果你能夠存在內存泄漏,由於Java沒有明確的方式讓開發人員刪除堆數據。
您有權訪問此java二進制文件的源代碼嗎?如果是這樣,可能值得分析它,看看是否有任何瓶頸可以更好地寫出來減少GC活動。這可以使用大多數Java分析器完成,例如JProbe。
java二進制非常簡單,它只是檢索命令行參數並調用jasperreport函數來創建報告,該報告傳遞給System.out outputstream,PHP通過「passthrough」函數讀取它。 所以花時間在Jasperreport上完成報告,多數民衆贊成我如何想java普遍加速。 – Nelson 2010-05-28 08:28:40
看起來像控制JVM GC設置是您的唯一途徑。 – display101 2010-05-28 08:39:50
爲了避免垃圾回收器釋放任何對象的變量或屬性, 您必須將此屬性(由gc發佈)設置爲靜態類 這是我的解決方案。
示例:
private static String myProperty;
只是暗示其他方法(因爲流程啓動也需要時間):http://github。com/hudora/pyJasper包含一個(java)服務器,它可以根據請求運行jasperreports,而不需要啓動/關閉進程。 – ZeissS 2010-05-28 08:16:44
相關的具體對象:http://stackoverflow.com/questions/1329926/how-to-prevent-an-object-from-getting-garbage-collected – 2015-03-04 08:08:24