在啓動時本地運行的應用程序(Spring,JPA Hibernate,Sybase 12,Webapp)佔用基於VisualVM的256MB堆空間的40MB。當我觸發一個返回超過70,000行的文本數據(文本數據沒有斑點)時,堆空間圖形將最高可達256MB,並且會丟失內存。 我已經通過setMaxResults(limit)解決了這個問題。但是,當我查詢相同的數據,複製粘貼到文本文件並保存到文件系統時,我可以看到文本的大小隻有26MB。從數據庫中加載26MB文本數據消耗258MB的JVM堆棧
因此,實際上,通過從數據庫中加載26MB數量的文本消耗216MB(從256-40),在內存不足的情況下耗費190MB內存(012MB)也許這將是框架,但我不知道它是如何消耗超過實際加載的數據...
* *再次注意,我解決了這與setMaxResults(限制),我的問題不是做什麼,而是爲什麼,爲了教育目的。
你的意思是190Mb是用來表示數據還是190Mb在讀取過程中被分配? – 2012-07-27 03:21:33
我的意思是190MB在發生內存不足錯誤時全部用完。來自數據庫的數據僅爲26MB,基於複製粘貼並將其保存到文本文件。 – 2012-07-27 03:23:29