我有一段代碼,它讀取文件中的大量數據並將其寫入excel文件。我所面臨的問題是,當數據超出堆大小的限制時,會拋出內存異常。我試圖增加堆大小和程序正常運行。但問題是,我的機器上的內存有限,如果我爲這個堆提供了巨大的空間,機器變得非常慢。那麼,在處理一些數據限制之後,有沒有辦法釋放內存,以便我不需要增加堆大小來運行我的代碼?我對這種東西比較新,所以請提出一些建議如何避免在不增加日誌上的堆大小的情況下發生內存異常
2
A
回答
2
在這種情況下,您需要重構代碼,以便它可以處理小塊數據。創建一個小緩衝區,讀取數據,處理它並將其寫入Excel文件。然後繼續下一次迭代,讀入相同的緩衝區。
當然,您使用的Excel庫需要能夠像這樣工作,並且不應該要求一次寫入整個文件。
0
我認爲,JXL API提供了這種有限的緩衝區功能。它是一個開源的API。 http://jexcelapi.sourceforge.net/
0
您可以使用DirectByteBuffer與Buffer.allocateDirect(byteSize);或MemoryMappedFile,它們使用堆內存中的內存空間。
+0
但是,如果達到OS /體系結構/硬件強加的內存限制,則分配直接緩衝區也會導致OutOfMemoryError。這種情況很可能發生在這種情況下,因爲OP說他的機器內存不足。 –
+0
因此,您可以將數據保存或保存到永久存儲(HDD),也許使用Gson將數據保存到磁盤 – UsTa
相關問題
- 1. 在不增加堆空間的情況下避免java.lang.OutOfMemoryError異常?
- 2. 併發修改異常。在這種情況下如何避免?
- 3. 如何在不修改jmeter.bat文件的情況下增加JMeter堆大小?
- 4. 如何避免「超出最大調用堆棧大小」異常?
- 5. Python非常大集。如何避免內存不足異常?
- 6. 如何增加IntelliJ IDEA上的內存堆大小?
- 7. 在這種情況下如何避免內存泄漏?
- 8. 如何在不增加JVM的情況下處理堆空間?
- 9. 在不增加堆大小的情況下修正GC開銷限制
- 10. C#\避免內存異常
- 11. 如何在不增加內存的情況下在IOS上使用html canvas toDataURL?
- 12. Java堆大小增加進出內存
- 13. 如果任何異常情況發生
- 14. 我如何避免TDIST日益增長的內存不足?
- 15. JavaFX:如何在不增加容器(標籤,按鈕)大小的情況下增加文本大小?
- 16. 如何在沒有OkHttp的情況下增加Picasso磁盤緩存大小?
- 17. 如何在不使用免費()的情況下釋放內存
- 18. EF4的SaveChanges如何避免內存不足的異常
- 19. 如何在不增加div大小的情況下在HTML中應用填充?
- 20. 如何在發生異常情況下使硒進行拍照
- 21. 如何避免這種情況下
- 22. 如何避免內存不足的異常
- 23. 如何在不發生OOM(內存不足)異常的情況下執行屏幕捕獲?
- 24. 如何在不產生異常的情況下檢查文件是否存在?
- 25. 如何增加phpmyadmin的內存大小
- 26. 如何在不保持會話的情況下避免比較?
- 27. Drupal:如何在少數情況下避免內存耗盡的錯誤消息
- 28. 蟒蛇 - 在日誌輸出抑制異常情況下
- 29. 試圖避免成長堆(FRAG情況)
- 30. 如何在不增加內存消耗的情況下綁定data.table?
向我們展示您的代碼(一個小的,自包含的等)的版本,您可以在其中讀取和寫入數據(但不是所有其他您可能需要的東西,儘可能小,但足以顯示行爲),我們可能會對此發表評論。 – Nanne
http://stackoverflow.com/questions/2356137/read-large-files-in-java看看這個問題。 –
我必須從一些文件中讀取數據,然後一次寫入一個excel文件。 –