正确设置IntelliJ IDEA中的堆大小 [英] Setting heap size in IntelliJ IDEA correctly

查看:4791
本文介绍了正确设置IntelliJ IDEA中的堆大小的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在IntelliJ IDEA中运行Processing应用程序时遇到这个特殊问题。我想保存一个大图像并执行此操作我遇到以下异常:

I have this peculiar problem with running a Processing application in IntelliJ IDEA. I want to save a large image and to do this I run in to the following exception:


线程动画线程java中的异常。 lang.OutOfMemoryError:Java堆空间
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)

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)

所以显然这里存在一些内存分配问题。问题是,当我更改IntelliJ中的.vmoptions文件时,我得到相同的结果,它们没有任何效果。 IDE右下角的内存编号相应增加,但似乎不让我的应用程序分配更多内存。

So clearly there is some memory allocation problem here. The problem is that when i change the .vmoptions files in IntelliJ I get the same results, they have no effect. The "memory" number at the lower right corner of the IDE increases accordingly but it does not seem to let my application allocate more memory.

当我在处理IDE中运行处理应用程序时,我可以设法通过设置较大的堆大小来保存更大的文件。

When I run the processing application in the processing IDE I can manage to save much larger files by setting a large heap size.

在IntelliJ中,256mb以上的东西似乎有所作为。所以我的问题是如何在IntelliJ中设置更大的堆大小,允许我的应用程序分配更多内存?

In IntelliJ nothing over 256mb seems to make a difference. So my question is how do I set a larger heap size in IntelliJ that allows my application to allocate more memory?

感谢您的帮助!

我附上了我的项目的代码,以防有人想要测试它:

I attach the code for my project in case anyone wants to test it out:

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


推荐答案

更改vmoptions文件调整IntelliJ使用的内存,但是你在这里遇到的是由IntelliJ启动以执行你的应用程序的JRE内存不足。您需要在运行/调试配置的VM选项部分中调整内存设置,例如:

Changing vmoptions file adjusts the memory used by IntelliJ, but what you're having here is a shortage of memory of JRE that is launched by IntelliJ to execute your application. You need to adjust the memory setting in VM options part of the Run/Debug configuration, for example:

这篇关于正确设置IntelliJ IDEA中的堆大小的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆