2013-09-05 19 views
7

Ich habe dieses eigenartige Problem mit der Ausführung einer Verarbeitung-Anwendung in IntelliJ IDEA. Ich mag ein großes Bild speichern und diese laufe ich in der folgenden Ausnahme zu tun:Festlegen der Heap-Größe in IntelliJ IDEA richtig

Exception in thread "Animation Thread" java.lang.OutOfMemoryError: Java heap space at java.awt.image.DataBufferInt.(DataBufferInt.java:75) at java.awt.image.Raster.createPackedRaster(Raster.java:467) at java.awt.image.DirectColorModel.createCompatibleWritableRaster(DirectColorModel.java:1032) at java.awt.image.BufferedImage.(BufferedImage.java:331) at processing.core.PImage.saveImageIO(PImage.java:3117) at processing.core.PImage.save(PImage.java:3297) at OffScreenRender.stopRender(OffScreenRender.java:38) at MainVecField.draw(MainVecField.java:93) at processing.core.PApplet.handleDraw(PApplet.java:2305) at processing.core.PGraphicsJava2D.requestDraw(PGraphicsJava2D.java:243) at processing.core.PApplet.run(PApplet.java:2176) at java.lang.Thread.run(Thread.java:724)

So klar, dass ein Speicherzuordnungsproblem hier. Das Problem ist, dass wenn ich die .vmoptions Dateien in IntelliJ ändere, die gleichen Ergebnisse erhalten, haben sie keine Wirkung. Die "Speicher" -Nummer in der unteren rechten Ecke der IDE erhöht sich entsprechend, aber es scheint nicht zu erlauben, dass meine Anwendung mehr Speicher zuweist.

Wenn ich die Verarbeitungsanwendung in der Verarbeitungs-IDE ausführe, kann ich viel größere Dateien speichern, indem ich eine große Heap-Größe einstelle.

In IntelliJ scheint nichts über 256mb einen Unterschied zu machen. Meine Frage ist also, wie kann ich eine größere Heap-Größe in IntelliJ einstellen, die meiner Anwendung erlaubt, mehr Speicher zuzuweisen?

Vielen Dank für Ihre Hilfe!

lege ich den Code für mein Projekt, falls jemand will, um es testen:

import processing.core.*; 

public class TestClassMain extends PApplet 
{ 

    public static void main(String args[]) 
    { 
     PApplet.main(new String[] { "--present", "TestClassMain" }); 
    } 

    //Global variables 
    OffScreenRender screenRender; 
    int c = 0; 

    //Variables for offScreenRender 
    int resFactor = 10; 
    boolean offScreenRenderSwitch = false; 

    public void setup() 
    { 
     size(1000,700); 
     background(0); 
     stroke(255); 

     //Initialize the render object 
     screenRender = new OffScreenRender(this, 11000, 7950, resFactor); 
    } 

    public void draw() 
    { 
     frameRate(30); 
     stroke(255); 

     //Check if the render should be saved 
     if(offScreenRenderSwitch == true){screenRender.startRender();} 
     background(0,0,0); 
     rect(20+c,height/2,60,60); 

     if(offScreenRenderSwitch == true) 
     { 
      screenRender.stopRender(); 
      offScreenRenderSwitch = false; 
     } 
     c += 2; 
    } 

    public void keyPressed() 
    { 
     //Render the graphics to an offScreen buffer 
     offScreenRenderSwitch = true; 
    } 
} 


import processing.core.*; 

/** 
* Renders the processingsketch to a .tif file at specified resolution. 
*/ 

public class OffScreenRender 
{ 
    PApplet parent; // The parent PApplet 
    PGraphics render; 
    int width; 
    int height; 
    int resFactor; 

    OffScreenRender(PApplet p, int width_, int height_, int resFactor_) 
    { 
     //Initialize variables 
     parent = p; 
     width = width_; 
     height = height_; 
     resFactor = resFactor_; 

     render = parent.createGraphics(width, height); 
    } 

    //Render the image 
    void startRender() 
    { 
     parent.beginRecord(render); 
     render.scale(resFactor); 
     PApplet.println("first step"); 
    } 

    //Render the image 
    void stopRender() 
    { 
     parent.endRecord(); 
     PApplet.println("second step"); 
     render.save("hej"); 
     PApplet.println("final step"); 
    } 
} 

Antwort

32

Ändern vmoptions Datei ausgeführt stellt den Speicher verwendet von IntelliJ, aber was Sie haben hier ein Mangel an Speicher von JRE, die von IntelliJ gestartet um Ihre Anwendung auszuführen. Sie müssen die Speichereinstellung in VM-Optionen Teil der Run/Debug-Konfiguration, zum Beispiel anzupassen:

enter image description here

+0

Vielen Dank! Das hat mein Problem gelöst! –

+0

Mine ist tatsächlich gescheitert, als ich versucht habe, der Antwort in INTELLIGENZ zu folgen IDEA 15 CE - Ungültige maximale Heapgröße: -Xmx (1024m) – stian

+5

Ich benutze '-Xmx1024m' (ohne Leerzeichen) statt' -Xmx 1024m' –

2

IntelliJ zeigt Ihnen die verwendete Menge und die aktuelle Größe des Haufens. Sie versuchen, das Maximum festzulegen, das nicht angezeigt wird.

Sie können anhängen VisualVM zu IntelliJ das Maximum zu sehen von jvisualvm

+0

Vielen Dank für Ihre Antwort! Kannst du mir bitte etwas mehr erklären, wie ich VisualVM starten würde? Vielen Dank! –

+1

Sie öffnen eine X-Term- oder MS-DOS-Eingabeaufforderung oder Start -> Ausführen und geben Sie 'jvisualvm' ein. Nach dem Start und dem Auffinden der JVMs, die auf Ihrem System ausgeführt werden, wählen Sie' IntelliJ IDEA'. Es ist wirklich einfach, du solltest es versuchen. –