2013-09-05 11 views
7

Mam ten szczególny problem z uruchomieniem aplikacji przetwarzania w IntelliJ IDEA. Chcę zapisać duży obraz i uruchomić to do następującego wyjątku:Ustawianie wielkości sterty w IntelliJ IDEA poprawnie

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)

Tak więc istnieje tu pewien problem z alokacją pamięci. Problem polega na tym, że kiedy zmieniam pliki .vmoptions w IntelliJ, uzyskuję takie same wyniki, nie mają one żadnego efektu. Liczba "pamięci" w prawym dolnym rogu IDE odpowiednio wzrasta, ale nie wydaje się, aby moja aplikacja mogła przydzielić więcej pamięci.

Po uruchomieniu aplikacji przetwarzającej w przetwarzaniu IDE można zarządzać zapisaniem znacznie większych plików, ustawiając duży rozmiar sterty.

W wersji IntelliJ nic ponad 256 MB nie wydaje się mieć znaczenia. Moje pytanie brzmi: jak ustawić większy rozmiar sterty w IntelliJ, który pozwala mojej aplikacji na przydzielenie większej ilości pamięci?

Dziękuję za pomoc!

załączam kod dla mojego projektu w przypadku gdy ktoś chce przetestować go:

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

Odpowiedz

32

Zmiana pliku vmoptions dostosowuje pamięć używaną przez IntelliJ, ale co masz tutaj brakuje pamięci JRE, który jest uruchamiany przez IntelliJ aby wykonać twoją aplikację. Trzeba dostosować ustawienia pamięci w VM opcji komponent konfiguracji Run/Debug, na przykład:

enter image description here

+0

Dziękujemy! To rozwiązało mój problem! –

+0

Mój błąd nie powiodło się, gdy próbuję postępować zgodnie z odpowiedzią w intelliJ IDEA 15 CE - Nieprawidłowy maksymalny rozmiar sterty: -Xmx (1024m) – stian

+5

Używam '-Xmx1024m' (bez spacji) zamiast' -Xmx 1024m' –

2

IntelliJ pokazuje ilość używanych i aktualną wielkość sterty. Próbujesz ustawić maksimum, którego nie pokazuje.

Możesz dołączyć VisualVM do IntelliJ zobaczyć maksimum uruchamiając jvisualvm

+0

Dziękuję za odpowiedź! Czy możesz wyjaśnić nieco więcej na temat uruchamiania VisualVM? Dziękuję Ci! –

+1

Otworzysz X-Term lub MS-DOS lub Start -> Uruchom i wpisz 'jvisualvm' Po uruchomieniu i odnajdzie JVM uruchomione w twoim systemie, wybierz' IntelliJ IDEA'. To naprawdę proste, powinieneś tego spróbować. –