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");
}
}
Grazie! Questo ha risolto il mio problema! –
Il mio tentativo fallisce quando si tenta di seguire la risposta in intelliJ IDEA 15 CE - Dimensione massima heap non valida: -Xmx (1024m) – stian
Uso '-Xmx1024m' (senza spazio) anziché' -Xmx 1024m'' –