这是我第一次提问,所以如果我做错了事,我很抱歉。我已经在这个网站和其他地方进行了广泛的研究,试图弄清楚为什么我会出现这种内存不足的错误,但我找不到那些已经做过的人的事情。他们所知道的东西耗费了大量的记忆。我使用我们最近在计算机科学课上使用的非常简单的游戏引擎制作了一个小游戏。我添加了一个Animation类,它接收我使用.getSubImage()从精灵表中获取的BufferedImages数组,并在Player类中创建这些数组/动画:
//Arrays for each animation - .getSprite pulls a subImage from the spritesheet
private BufferedImage[] walkingLeft = {Sprite.getSprite(0, 9), Sprite.getSprite(1, 9), Sprite.getSprite(2, 9), Sprite.getSprite(3, 9), Sprite.getSprite(4, 9), Sprite.getSprite(5, 9), Sprite.getSprite(6, 9), Sprite.getSprite(7, 9), Sprite.getSprite(8, 9)};
private BufferedImage[] walkingRight = {Sprite.getSprite(0, 11), Sprite.getSprite(1, 11), Sprite.getSprite(2, 11), Sprite.getSprite(3, 11), Sprite.getSprite(4, 11), Sprite.getSprite(5, 11), Sprite.getSprite(6, 11), Sprite.getSprite(7, 11), Sprite.getSprite(8, 11)};
private BufferedImage[] standingg = {Sprite.getSprite(0, 10)};
private BufferedImage[] pullingWeaponRight = {Sprite.getSprite(0, 19), Sprite.getSprite(1, 19), Sprite.getSprite(2, 19), Sprite.getSprite(3, 19), Sprite.getSprite(4, 19), Sprite.getSprite(5, 19)};
//private BufferedImage[] pullingWeaponLeft = {Sprite.getSprite(0, 17), Sprite.getSprite(1, 17), Sprite.getSprite(2, 17), Sprite.getSprite(3, 17), Sprite.getSprite(4, 17), Sprite.getSprite(5, 17)};
//private BufferedImage[] walkingUp = {Sprite.getSprite(0, 8), Sprite.getSprite(1, 8), Sprite.getSprite(2, 8), Sprite.getSprite(3, 8), Sprite.getSprite(4, 8) };
//some animation states
private Animation walkLeft = new Animation(walkingLeft, 2);
private Animation walkRight = new Animation(walkingRight, 2);
private Animation standing = new Animation(standingg, 10);
private Animation pullWeaponRight = new Animation(pullingWeaponRight, 6);
//This animation gets assigned to walkLeft, walkRight, etc. based on the situation
private Animation animation = standing;
它将在当前数组和动画中运行时没有错误,但只要我添加另一个BufferedImages数组(例如,如果我取消注释pullWeaponLeft或walkingUp,甚至不用它创建动画),我得到了我尝试运行程序时出错。考虑到精灵表中的图像非常小(每个64x64像素),我真的不确定为什么内存耗尽。是否有一些关于使阵列占用大量空间我不知道的事情?这是我的主要问题。
我试图增加堆空间,这是没有用的,但我觉得我不应该首先得到这个错误,所以我不想追求那解决方案;不幸的是,这是我在搜索此问题时经常出现的解决方案。
我也有一个Frame类,所以请告诉我是否有帮助。我知道这里的问题应该是具体的,所以我真的只想知道创建的BufferedImage数组是否会为任何有关内存使用的人抛出一个红旗,我对Java有点新鲜。
告诉我是否还应该添加其他信息,谢谢!
编辑: 我用了一些代码编写的代码来打印最大堆空间,这就是打印的内容:
堆大小= 85000192
这是代码:
public class GetHeapSize {
public static void main(String[]args){
//Get the jvm heap size.
long heapSize = Runtime.getRuntime().totalMemory();
//Print the jvm heap size.
System.out.println("Heap Size = " + heapSize);
}
}
希望有所帮助。