2011-02-08 18 views
5

Sonunda java dökümü oluştur En sonunda OutOfMemory ürününü oluşturması gereken bir programım var. program kodu geçerli:OutOfMemory

public class VeryLargeObject implements Serializable { 
    public static final int SIZE = 1 << 12; 

    public String tag; 
    public int[][] bigOne = new int[SIZE][SIZE]; 

    { 
     // Initialize bigOne 
     for(int i = 0; i < SIZE ; ++i) { 
      for(int j = 0; j < SIZE; ++j) { 
       bigOne[i][j] = (int) (Math.random() * 100); 
      } 
     } 
    } 

    public VeryLargeObject(String tag) { 
     this.tag = tag; 
    } 

    public static void main(String args[]) { 
     VeryLargeObject[] vla = new VeryLargeObject[1 << 12]; 
     for(int i = 0; i < Integer.MAX_VALUE; ++i) { 
      vla[i] = new VeryLargeObject("aa"); 
     } 
    } 
} 

aşağıdaki parametrelerle programı çalıştırın:

java VeryLargeObject -Xms1024m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath="D:\workspace" 

programı OutOfMemory başarısız ancak herhangi bir döküm dosyası oluşturulur. neden olduğu hakkında bir fikrin var mı?

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 
     at VeryLargeObject.<init>(VeryLargeObject.java:14) 
     at VeryLargeObject.main(VeryLargeObject.java:32) 
+3

Öbek dosyası üretmediğini mi söylemek istediniz? Ve -XX: -HighDumpOnOutOfMemoryError -XX: -HeapDumpOnOutOfMemoryError yerine (+ işareti) dikkat edin – CoolBeans

+0

> Program OutOfMemory ile başarısız olur, ancak dosya oluşturulursa artık dökümdür. - Yazım hatası mı? - ** şimdi mi, yoksa ** hayır mı demek istiyorsun? – Ralph

cevap

8

Başlangıç ​​için ÖNCE XX seçeneklerini ve herhangi seçenekleri damla VeryLargeObject, aksi halde parametreleri java programına geçirirsiniz ve JVM

+0

sürücüsünün kök direcoty'sinde VeryLargeObject için herhangi bir belge bulamıyorum, bize bazı özgün bağlantılar verebilir. – Vipin

+0

@Vipin, 'VeryLargeObject', 'main (String []) 'öğesini içeren sınıftır. Sorunun kendisine bak. – bestsss

+0

Bunu fark etmedim, şimdi anladım :) – Vipin

5

Ben jvm yoluna yazmak ve sessizce başarısız olamazdı şüpheli. Örneğin, bu, var olan bir dizinde bir dosya adı olmalıdır. D:\workspace dizininiz varsa, başarısız olur. D:\workspace\heap.hprof varsa, işe yarayabilir. Bunu yapabileceğinizi görmek için önce bu adın boş bir dosyasını oluşturmayı deneyin.

+1

+1 25 sn daha hızlı benden – Ralph

+1

parametreler yanlış yazılmış – bestsss

14

Sorun, -XX:HeapDumpPath'un bir dosyayı değil, bir dosyayı spefiye etmesidir.

-Xms1024m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath="c:\temp\dump2.hprof" 

ekledi: Eğer "hataları" hem düzeltmek gerekir böylece

ve bestsss, çok doğru:

java -Xms1024m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath="c:\temp\dump2.hprof" VeryLargeObject 
+3

'-XX: HeapDumpPath' da şu şekilde bir yol olabilir: '-XX: HeapDumpPath = c: /', "java_pid4128 desenli dökümler üretecek .hprof "C: –

İlgili konular