2016-02-17 47 views
0

我寫了下面的代碼將一維數組轉換爲二維數組。每當我將它用於小尺寸數組時,它都能正常工作,只要數組變得太大,代碼就會拋出一個java.lang.OutOfMemoryError: Java heap space異常。創建陣列時沒有足夠的堆空間

byte[][] twoD = new byte[(int)Math.ceil(xlArray.length/(double)4096)][4096]; 

難道僅僅是引起了IDE中的問題,因爲它沒有獲得足夠的堆空間的機器或不止於此呢?

+0

什麼是最高值xlArray長度可以有?哪個IDE? Java 7或Java 8? – SomeDude

+0

這與JVM有關。因爲所有的內存都是在Java中爲你管理的,所以它確保你只能使用這麼多的內存。運行程序時,你可以指定你希望堆的大小,但限制實際上取決於平臺(如[此人](https://developer.ibm.com/answers/questions/175172/why-can- i-not-set-a-maximum-heap-setting-xmx-over.html)問)。 – callyalater

+0

我看不出有什麼理由認爲問題是異常以外的任何事情表明:堆中沒有足夠的可用空間來分配所有請求的對象。如果您正在IDE中運行此解決方案,則適當的解決方案取決於IDE的詳細信息。您可能能夠指定程序應該以較大的堆運行;您可能需要增加IDE自己的堆;或者您可能需要更好的IDE。 –

回答

1

IDE(任何IDE)通常都會生成一個具有自己內存設置的子進程。你通常可以用某種配置文件來配置它們。

在Eclipse中,例如選擇菜單「運行」 - >「運行配置」。在「Java應用程序」配置中,轉到「參數」選項卡。

你可以在裏面設置VM參數。有關內存管理的信息,請參閱Java Non-Standard Options

0

當調用Java使用:

  • -Xms指定的初始Java堆大小。
  • -Xmx最大Java堆大小(默認大小爲128mb)。

到這裏看看:https://docs.oracle.com/javase/8/docs/technotes/tools/windows/java.html

如果您使用的是像的NetBeans的IDE,月食等你可以找到運行配置選項 - >參數 - > VM參數和設置XMX和(或) XMS。


How can I increase the JVM memory?

+0

你從哪裏找到堆的128mb默認大小?我查看了[Oracle文檔](http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html),發現了64m。它改變了嗎? – callyalater

+0

也許它已被更改。但它是128MB。 –

相關問題