Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将堆大小增加到6GB_Java_Heap Memory - Fatal编程技术网

Java 将堆大小增加到6GB

Java 将堆大小增加到6GB,java,heap-memory,Java,Heap Memory,我正在看以下文章: 现在我有一个需要5GB内存的程序,在执行文章中告诉我的操作(即通过在arguments字段中使用-Xmx5g来增加堆大小)的同时,我仍然得到了 Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 我的系统是Windows 7(64位),带有8GB RAM。我做错什么了吗?如果是,我应该如何获得5GB的堆内存,或者我的系统无法处理 注:我必须使用25K*25K大小的2D矩阵进行计算,该

我正在看以下文章:

现在我有一个需要5GB内存的程序,在执行文章中告诉我的操作(即通过在arguments字段中使用-Xmx5g来增加堆大小)的同时,我仍然得到了

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
我的系统是Windows 7(64位),带有8GB RAM。我做错什么了吗?如果是,我应该如何获得5GB的堆内存,或者我的系统无法处理


注:我必须使用25K*25K大小的2D矩阵进行计算,该矩阵具有所有非零值。因此,我也不能使用稀疏矩阵。

当JVM没有足够的内存来分配对象时,会抛出OutOfMemoryError。如果您定义了heap of
5G
,这几乎肯定意味着您存在某种内存泄漏。例如,我可以编写在任何环境下都会导致
OutOfMemoryError
的非常简单的代码:

List<String> list = new LinkedList<>();
while(true) {
    list.add("a");
}
List List=newlinkedlist();
while(true){
列表。添加(“a”);
}
运行此代码并等待几秒钟<将抛出代码>OutOfMemoryError。这是因为我将字符串添加到列表中,但从不清理它

我相信您的应用程序也会发生类似的情况

我明白,这并不像我的示例那么简单,所以您可能必须使用profiler来调试它,并了解内存泄漏的原因

编辑: 我刚刚看到你和25K*25K martrix一起工作。这意味着你有6.25亿个电池。您没有提到矩阵的类型,但如果它是占用4个字节的
int
,则需要625*4=2500M=2.5G内存,因此5G就足够了


请试着分析你的程序中还发生了什么,以及你的内存在哪里使用

当JVM没有足够的内存来分配对象时,将抛出OutOfMemoryError。如果您定义了heap of
5G
,这几乎肯定意味着您存在某种内存泄漏。例如,我可以编写在任何环境下都会导致
OutOfMemoryError
的非常简单的代码:

List<String> list = new LinkedList<>();
while(true) {
    list.add("a");
}
List List=newlinkedlist();
while(true){
列表。添加(“a”);
}
运行此代码并等待几秒钟<将抛出代码>OutOfMemoryError。这是因为我将字符串添加到列表中,但从不清理它

我相信您的应用程序也会发生类似的情况

我明白,这并不像我的示例那么简单,所以您可能必须使用profiler来调试它,并了解内存泄漏的原因

编辑: 我刚刚看到你和25K*25K martrix一起工作。这意味着你有6.25亿个电池。您没有提到矩阵的类型,但如果它是占用4个字节的
int
,则需要625*4=2500M=2.5G内存,因此5G就足够了


请试着分析你的程序中还发生了什么,以及你的内存在哪里使用

当JVM没有足够的内存来分配对象时,将抛出OutOfMemoryError。如果您定义了heap of
5G
,这几乎肯定意味着您存在某种内存泄漏。例如,我可以编写在任何环境下都会导致
OutOfMemoryError
的非常简单的代码:

List<String> list = new LinkedList<>();
while(true) {
    list.add("a");
}
List List=newlinkedlist();
while(true){
列表。添加(“a”);
}
运行此代码并等待几秒钟<将抛出代码>OutOfMemoryError。这是因为我将字符串添加到列表中,但从不清理它

我相信您的应用程序也会发生类似的情况

我明白,这并不像我的示例那么简单,所以您可能必须使用profiler来调试它,并了解内存泄漏的原因

编辑: 我刚刚看到你和25K*25K martrix一起工作。这意味着你有6.25亿个电池。您没有提到矩阵的类型,但如果它是占用4个字节的
int
,则需要625*4=2500M=2.5G内存,因此5G就足够了


请试着分析你的程序中还发生了什么,以及你的内存在哪里使用

当JVM没有足够的内存来分配对象时,将抛出OutOfMemoryError。如果您定义了heap of
5G
,这几乎肯定意味着您存在某种内存泄漏。例如,我可以编写在任何环境下都会导致
OutOfMemoryError
的非常简单的代码:

List<String> list = new LinkedList<>();
while(true) {
    list.add("a");
}
List List=newlinkedlist();
while(true){
列表。添加(“a”);
}
运行此代码并等待几秒钟<将抛出代码>OutOfMemoryError。这是因为我将字符串添加到列表中,但从不清理它

我相信您的应用程序也会发生类似的情况

我明白,这并不像我的示例那么简单,所以您可能必须使用profiler来调试它,并了解内存泄漏的原因

编辑: 我刚刚看到你和25K*25K martrix一起工作。这意味着你有6.25亿个电池。您没有提到矩阵的类型,但如果它是占用4个字节的
int
,则需要625*4=2500M=2.5G内存,因此5G就足够了

请试着分析你的程序中还发生了什么,以及你的内存在哪里使用

5G/(25K*25K)~8字节

慷慨地假设您的程序除了那个矩阵之外不使用内存,每个矩阵元素必须不超过8字节

您应该至少计算大约的内存需求,以检查是否有可能在您的硬件上处理这种大小的问题。例如,如果需要MxN大小为
double
值的2D数组,则至少需要8*M*N字节的内存。

5G/(25K*25K)~8字节

慷慨地假设您的程序除了那个矩阵之外不使用内存,每个矩阵元素必须不超过8字节

您应该至少计算大约的内存需求,以检查是否有可能在您的硬件上处理这种大小的问题。例如,如果您需要