2013-09-05 11 views
7

Ho questo problema particolare con l'esecuzione di un'applicazione di elaborazione in IntelliJ IDEA. Voglio salvare un'immagine di grandi dimensioni e per fare questo corro per la seguente eccezione:Impostazione corretta della dimensione heap in IntelliJ IDEA

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)

Quindi, chiaramente c'è qualche problema di allocazione della memoria qui. Il problema è che quando cambio i file .vmoptions in IntelliJ ottengo gli stessi risultati, non hanno alcun effetto. Il numero di "memoria" nell'angolo in basso a destra dell'IDE aumenta di conseguenza ma non sembra consentire alla mia applicazione di allocare più memoria.

Quando eseguo l'applicazione di elaborazione nell'IDE di elaborazione, riesco a salvare file molto più grandi impostando una dimensione heap elevata.

In IntelliJ nulla più di 256 MB sembra fare la differenza. Quindi la mia domanda è: come posso impostare una dimensione heap più grande in IntelliJ che consente alla mia applicazione di allocare più memoria?

Grazie per il vostro aiuto!

ho allegare il codice per il mio progetto nel caso in cui qualcuno vuole provarlo:

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"); 
    } 
} 

risposta

32

Modifica del file vmoptions regola la memoria utilizzata da IntelliJ, ma quello che hai qui è una carenza di memoria di JRE che viene lanciato da IntelliJ per eseguire la tua applicazione. È necessario regolare l'impostazione della memoria nelle opzioni di VM parte della configurazione Run/Debug, ad esempio:

enter image description here

+0

Grazie! Questo ha risolto il mio problema! –

+0

Il mio tentativo fallisce quando si tenta di seguire la risposta in intelliJ IDEA 15 CE - Dimensione massima heap non valida: -Xmx (1024m) – stian

+5

Uso '-Xmx1024m' (senza spazio) anziché' -Xmx 1024m'' –

2

IntelliJ si mostra la quantità utilizzata e la dimensione attuale del mucchio. Stai provando a impostare il massimo che non mostra.

È possibile allegare VisualVM per IntelliJ per vedere la massima eseguendo jvisualvm

+0

Grazie per la risposta! Puoi spiegare un po 'di più su come iniziare il VisualVM? Grazie! –

+1

Si apre un prompt X-Term o MS-DOS oppure Start -> Esegui e si digita 'jvisualvm' Dopo aver avviato e trovato le JVM in esecuzione sul sistema, si seleziona' IntelliJ IDEA'. È davvero semplice, dovresti provarlo. –