java - 在 IntelliJ IDEA 中正确设置堆大小

标签 java intellij-idea processing heap-size processing-ide

我在 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)

很明显这里存在一些内存分配问题。问题是,当我更改 IntelliJ 中的 .vmoptions 文件时,我得到相同的结果,但它们没有效果。 IDE右下角的“内存”数字相应增加,但似乎并没有让我的应用程序分配更多内存。

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

在 IntelliJ 中,超过 256mb 似乎没有什么不同。所以我的问题是如何在 IntelliJ 中设置更大的堆大小以允许我的应用程序分配更多内存?

感谢您的帮助!

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

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 选项部分调整内存设置,例如:

enter image description here

关于java - 在 IntelliJ IDEA 中正确设置堆大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18631038/

相关文章:

javascript - 为什么有些球显示它们发生了碰撞,而有些却没有?

java - 有没有办法找到一个字段是否是与 isPrimitive() 相同的 boolean 值?

java - Apache Commons EmailValidator 覆盖 isValidDomain

java - 如何为 getInstance 方法编写 Javadoc?

java - WebSocket 在 IDEA 中不起作用

java - 使用 UnfoldingMaps 绘制到 PGraphics

java - 处理 - 余弦法则 (sss) - NaN

java - Gradle 错误 :Gradle DSL method not found: 'executeWithoutThrowingTaskFailure()'

java - 构造函数 HashSet<Integer>(int[]) 未定义

android-studio - 如何设置Gradle的缩进