我在IntelliJ IDEA中运行处理应用程序时遇到了一个特殊的问题。我想保存一个大图像,为此我遇到以下异常:
异常在线程"动画线程"java.lang.OutOfMemoryError: Java堆空间在java.awt.image.DataBufferInt.(DataBufferInt.java:75)在java.awt.image.Raster.createPackedRaster(Raster.java:467)在java.awt.image.DirectColorModel.create兼容WritableRaster(DirectColorModel.java:1032)在java.awt.image.BufferedImage。(BufferedImage.java:331)在processing.core.PImage.saveImageIO(PImage.java:3117)在processing.core.PImage.save(PImage.java:3297)--18/>)在Main VecField.draw(Main VecField. java: 93)在处理. core。PApplet. handleDraw(PApplet. java: 2305)在处理. core。请求绘图(PGraphicsJava2D. java: 243)运行(PApplet. java: 2176)在java. lang。线程.运行(线程. java: 724)
显然这里存在内存分配问题。问题是,当我在IntelliJ中更改. vm选项文件时,我得到了相同的结果,它们没有任何效果。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");
}
}
IntelliJ向您显示使用的数量和堆的当前大小。您正试图设置它不显示的最大值。
通过运行jvisualvm
更改vmoptions文件会调整IntelliJ使用的内存,但您现在遇到的是IntelliJ启动用于执行应用程序的JRE内存不足。您需要在运行/调试配置的VM选项部分调整内存设置,例如:
问题内容: 我试图通过向catalina.sh添加以下行来调整tomcat 7(CentOS,java -version:1.6.0_25-b06)实例的初始堆大小: 启动tomcat失败,并将以下消息记录到catalina.out: 这些选项有什么问题? 问题答案: 您不得使用。只需使用以下命令:
问题内容: 有没有办法从正在运行的Java程序中设置堆大小? 问题答案: 没有。 对于具有非常多的堆需求的应用程序,您可以做的是设置最大的堆大小-Xmx并进行调整,以使堆缩小时该应用程序不会挂在大量内存上(使用默认设置即可) )。 但是请注意,当应用程序实际使用的内存变化剧烈且快速时,这可能会导致性能问题-在这种情况下,最好将其挂在所有内存上,而不是仅将其退还给操作系统以声明使用它再过一秒钟。您可
本文向大家介绍在C ++中正确使用堆栈和堆?,包括了在C ++中正确使用堆栈和堆?的使用技巧和注意事项,需要的朋友参考一下 堆栈-函数内部声明的所有变量将占用堆栈中的内存。因此,函数内的任何局部变量都位于堆栈中。 堆-这是程序的未使用内存,可用于在程序运行时动态分配内存。因此,如果我们希望某些东西的寿命比声明它的函数的寿命更长,则必须在堆上分配它。 示例 堆内存中的主要问题是碎片,而堆栈中更容易出
我是Java的初学者,刚开始使用Intellij作为我的IDE。 当我使用它时,有时会延迟。 我更改了我的 xms 和 xmx 以获得更大的堆大小(xms = 1024,xmx = 2048),但它抛出了一个错误。 所以,我把它回滚了。 错误消息是这样的:“初始堆大小设置为大于最大堆大小的值”。 有什么问题? 如果可能,如何增加最大堆大小? 我用的是笔记本电脑,它有8GB内存。x64Intelli
我有一个Grails 2.3。X项目,除非使用命令行参数指定更多堆栈大小,否则无法编译。目前这很好,但每次我第一次构建项目时都需要导出/设置JVM选项。此外,刚开始项目的开发人员总是会遇到这个问题,所以我希望它成为签出版本控制的代码的一部分。 有没有办法在Grails 2.3中设置stacksize(-Xss)JVM选项。X BuildConfig? P、 Xss JVM选项是文档较少的选项之一。
问题内容: 我正在尝试构建 Android Java项目 分支:feature-Fprototype_app 我收到此错误: 在jenkins配置的 “生成后操作”中, 我尝试在“ 其他属性” 框中设置(因为当我搜索错误时,人们建议为源设置正确的路径)。我尝试了许多组合,例如: 还是一样的错误。我究竟做错了什么 ? 好的,让我清除我造成的混乱。 首先,这是一个Android Maven项目。包结构