是否可以通过增加程序允许的内存来防止程序在遇到OutOfMemoryError
时崩溃?
可以在运行时完成吗?
我正在使用java.awt.Robot
谈论很多屏幕截图,过了一段时间我的Vector耗尽内存。 60 BufferedImage
它出来了。
所以1280 x 800分辨率,3字节RGB BufferedImage
和60张图像后,矢量出来了
所以我猜消耗的内存是
1280 x 800 x 60 x 3 = 做数学字节
答案 0 :(得分:3)
好吧,你实际上无法增加堆大小,但你可以使用新的堆大小来生成另一个进程。 玩一玩:
public class SpawnAndChangeHeap {
public static void main(String[] args){
//Get the jvm heap size.
long heapSize = Runtime.getRuntime().totalMemory();
JOptionPane.showMessageDialog(null, "" + heapSize );
if(args.length > 0 && args[0].equals("-spawn")) {
try {
Process proc;
proc = Runtime.getRuntime().exec("cmd.exe /c java -Xms32m -Xmx128m SpawnAndChangeHeap /n");
}
catch(Exception e) {System.out.println("something went wrong"); }
}
System.exit(0);
}
}
答案 1 :(得分:2)
您可能需要考虑除动态更改内存大小以外的其他解决方案,包括
答案 2 :(得分:2)
我正在使用
java.awt.Robot
谈论很多屏幕截图,一段时间后我的Vector
内存不足。
不要将它们放在Vector
中。根本不需要将它们存储在内存中。
而是将每张图片保存到以下任一位置: