我有一個關於Java堆空間的問題。Java堆內存
我有一個程序使用地理工具從街道網絡創建圖形。 我做了一些東西,但我遇到了OutOfMemoryError,但我不確定爲什麼。我使用下面的代碼來獲得可用內存量。
Runtime rt = Runtime.getRuntime();
long maxMb = rt.freeMemory()/(1024*1024);
System.out.println("Your JVM has " + maxMb + " MB of memory left");
而當我運行我的程序時,似乎有足夠的內存(請參閱輸出)。此控制檯輸出在發生OutOfMemory錯誤之前完成。那麼到底發生了什麼問題?當我放大Java堆空間時,發生OutOfMemory錯誤(但剩餘1461 MB)。我不知道爲什麼會發生這種情況?有任何想法嗎?
Your JVM has 981 MB of memory left
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Unknown Source)
at java.util.Arrays.copyOf(Unknown Source)
at java.util.ArrayList.grow(Unknown Source)
at java.util.ArrayList.ensureCapacityInternal(Unknown Source)
at java.util.ArrayList.add(Unknown Source)
at masterthesis.datastructures.Stroke.addStrokeSegment(Stroke.java:78)
at masterthesis.algorithms.StrokeBuilder.buildStroke(StrokeBuilder.java:145)
at org.geotools.test.Main.main(Main.java:109)
五月有一些內存泄漏(或)正在加載的圖像比繳費堆大? – kosa
這個程序比您給出的兩行更多嗎? –
這是一個相當大的計劃。但主要部分是它有一個包含800條街道(線條字符串)的shapefile的街道網絡。我所做的就是用geotools中的圖形構建器創建一個圖形,然後遍歷所有節點並構建所謂的筆畫(=具有小偏轉角度的線條集合)。在此期間發生錯誤。 – user1765902