我在IntelliJ IDEA中运行Processing应用程序时遇到了这个特殊问题.我想保存一个大图像并执行此操作我遇到以下异常:
线程"动画线程"中的异常java.lang.OutOfMemoryError:java.awt.image.Raster.createPackedRaster(Raster.java:467)中java.awt.image.DataBufferInt.(DataBufferInt.java:75)的Java堆空间java.awt.image.DirectColorModel.createCompatibleWritableRaster(DirectColorModel.java:1032)在java.awt.image.BufferedImage.(BufferedImage.java:331)处理处理时的processing.core.PImage.saveImageIO(PImage.java:3117). core.PImage.save(PImage.java:3297)在OffScreenRender.stopRender(OffScreenRender.java:38)的MainVecField.draw(MainVecField.java:93)处理.处理.Cack.Papplet.handleDraw(PApplet.java:2305)at at processing.core.PGraphicsJava2D.requestDraw(PGraphicsJava2D.java:243)atprocess.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 …Run Code Online (Sandbox Code Playgroud) 这可能是一个简单的问题,但我有两个大约1000个元素的数组,它们被称为posXArray和posYArray.我想用posYArray数字排序(最低的数字)但我希望元素posXArray具有相同的操作应用于它们......
例如,如果element [56] posYArray是最小的,我希望元素[56] posXArray也被移动到[0].
如何以简单/好的方式在Java中实现它?
非常感谢你的帮助!
这个问题是关于cmp装配的指令.我无法理解我的书如何推断SF和OF旗帜.
cmp vleft, vright
Run Code Online (Sandbox Code Playgroud)
根据我的书:对于有符号整数,有三个重要的(ZF)标志:零标志,溢出(OF)标志和标志(SF)标志.如果操作结果溢出(或下溢),则设置溢出标志.如果操作结果为负,则设置符号标志.如果vleft = vright,ZF则设置(就像无符号整数一样).如果vleft > vright,ZF是未设置的SF = OF.如果vleft < vright,ZF是未设置的SF != OF.不要忘记其他指令也可以改变FLAGS寄存器,而不仅仅是CMP.
首先,让我们考虑一下这个vleft > vright案子.我的书说如下:
如果vleft> vright,为什么SF = OF?如果没有溢出,则差异将具有正确的值,并且必须是非负的.因此,SF = OF = 0.但是,如果存在溢出,则差异将不具有正确的值(并且实际上将是负的).因此,SF = OF = 1.
第一部分我明白了SF = OF = 0.例如,它可以是:
0111 - 0101 = 0111 + 1010 + 1 = 10010 …