我開發了一個java程序,我已經在遠程機器上部署了它,並安裝了最新的jre1.8.0_60。我使用jdk1.8.0_60開發了這個程序。我測試了我的機器(內存6GB-64bit)和我的同事電腦(內存8GB-64bit)上的程序,程序執行時沒有任何問題,但是當我在遠程機器上執行相同的程序時(內存4GB-64BIT)這個錯誤:OutOfMemoryError:遠程Windows計算機上的Java堆空間
java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid3696.hprof ...
Heap dump file created [217326007 bytes in 2.721 secs]
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOfRange(Unknown Source)
at java.lang.String.<init>(Unknown Source)
at java.lang.StringBuilder.toString(Unknown Source)
at Invoice.GetInvoicesByStatusAndDate(Invoice.java:66)
at ClientSAAJ.GetInvoicesByStatusAndDate(ClientSAAJ.java:75)
at ClientSAAJ.main(ClientSAAJ.java:10)
難道是沒有足夠的內存,或者我有執行某種java配置嗎?
兩者都可以。或者,也許你將不同的數據傳遞給服務器上的程序(也許是大數據庫)。但正如我從堆棧跟蹤中可以看到的,你正在構建一個大的'String'(它變得非常大,所以最好避免這麼做)。也許最好從'Invoice.GetInvoicesByStatusAndDate(Invoice.java:66)''顯示代碼'找到問題的根源 –
@НиколайМитропольский你是對的,它是一個很大的XML字符串,但我也有另一個類,幾乎相同但這個班的工作很好。我會很快把代碼。 – Niki
一般來說,如果您要將數據從數據庫傳送到RAM(例如,如果您正在讀取數據庫中的所有實體並將它們寫入* String-in-RAM *中),則遲早您將耗盡內存。所以如果你想將數據庫內容轉換爲XML,那麼直接將XML寫入文件而不是String。 –