我正在Java 5上编写一个客户端Swing应用程序(图形字体设计器).最近,我遇到了错误,因为我对内存使用情况并不保守.用户可以打开无限数量的文件,程序将打开的对象保存在内存中.经过快速研究后,我在5.0 Java虚拟机中找到了人体工程学,其他人在Windows机器上说JVM默认最大堆大小为.java.lang.OutOfMemoryError: Java heap space64MB
鉴于这种情况,我该如何处理这种约束?
我可以使用java的命令行选项增加最大堆大小,但这需要找出可用的RAM并编写一些启动程序或脚本.此外,增加到一些有限的最大值并不能最终摆脱这个问题.
我可以重写我的一些代码来经常将对象持久化到文件系统(使用数据库是一回事)来释放内存.它可以工作,但它可能也很重要.
如果您可以向我指出上述想法的细节或某些替代方案,如自动虚拟内存,动态扩展堆大小,这将是很好的.
我正在使用8 GB RAM的Windows 2003服务器(64位).如何增加堆内存最大值?我正在使用该-Xmx1500m标志将堆大小增加到1500 Mb.我可以将堆内存增加到物理内存的75%(6 GB堆)吗?
Java 7已经出现了一段时间了,但我找不到任何关于垃圾收集器配置的好资源,特别是新的G1收集器.
我的问题:
我编写了一个代码并运行了很多但突然间我得到了一个OutOfMemoryError:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at javax.media.j3d.BoundingBox.<init>(BoundingBox.java:86)
at javax.media.j3d.NodeRetained.<init>(NodeRetained.java:198)
at javax.media.j3d.LeafRetained.<init>(LeafRetained.java:40)
at javax.media.j3d.LightRetained.<init>(LightRetained.java:44)
at javax.media.j3d.DirectionalLightRetained.<init>(DirectionalLightRetained.java:50)
at javax.media.j3d.DirectionalLight.createRetained(DirectionalLight.java:116)
at javax.media.j3d.SceneGraphObject.<init>(SceneGraphObject.java:119)
at javax.media.j3d.Node.<init>(Node.java:178)
at javax.media.j3d.Leaf.<init>(Leaf.java:50)
at javax.media.j3d.Light.<init>(Light.java:270)
at javax.media.j3d.DirectionalLight.<init>(DirectionalLight.java:87)
Run Code Online (Sandbox Code Playgroud) 我正在尝试将音频/视频转换为字节数组,反之亦然,使用下面的代码可以将音频/视频文件转换为字节数组(见下面的代码),但无法转换大文件(超过 50MB 的文件)是否有任何限制。 ? 如何将字节数组转换为音频/视频文件。?请帮帮我。
public byte[] convert(String path) throws IOException {
FileInputStream fis = new FileInputStream(path);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] b = new byte[1024];
for (int readNum; (readNum = fis.read(b)) != -1;) {
bos.write(b, 0, readNum);
}
byte[] bytes = bos.toByteArray();
return bytes;
}
Run Code Online (Sandbox Code Playgroud)
请帮忙得到结果
可能重复:
java.lang.OutOfMemoryError:Java堆空间
如何处理"java.lang.OutOfMemoryError:Java堆空间"错误(64MB堆大小)
你能告诉我怎样才能增加java内部堆内存?
我一直在这个文件上得到一个OutOfMemory错误,我不知道为什么.
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
public class Sgrep {
private String name;
public String field2;
public String go;
File File;
public String end;
Sgrep(String File0, String first) {
go = File0;
File = new File(File0);
name = first;
}
public String getFilename() {
return go;
}
public String search() {
try {
if (name == null) {
System.out.println("You cannot give a null string.");
}
BufferedReader yo = new BufferedReader(new FileReader(File));
StringBuffer bruh = new StringBuffer();
String …Run Code Online (Sandbox Code Playgroud)