Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.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 继续获取:请求的数组大小超过VM限制错误_Java_Out Of Memory - Fatal编程技术网

Java 继续获取:请求的数组大小超过VM限制错误

Java 继续获取:请求的数组大小超过VM限制错误,java,out-of-memory,Java,Out Of Memory,我在这里看到了几个与接收java错误相关的线程:java.lang.OutOfMemoryError:请求的数组大小超过VM限制,但我尝试了这些建议,没有一个对我有效。下面是我使用的脚本: #!/bin/bash #$ -cwd #$ -N Sample_S06-9841_A4_primary #$ -S /bin/bash module load picard/1.130 java -Xmx12g -XX:MaxPermSize=8192m -XX:+UseCompressedOops -D

我在这里看到了几个与接收java错误相关的线程:java.lang.OutOfMemoryError:请求的数组大小超过VM限制,但我尝试了这些建议,没有一个对我有效。下面是我使用的脚本:

#!/bin/bash
#$ -cwd
#$ -N Sample_S06-9841_A4_primary
#$ -S /bin/bash
module load picard/1.130

java -Xmx12g -XX:MaxPermSize=8192m -XX:+UseCompressedOops -Djava.io.tmpdir=/mnt/work1/users/home2/loldfiel/tmp -jar $picard_dir/picard.jar AddOrReplaceReadGroups INPUT=/mnt/work1/users/roehrlgroup/GCT_2/star_aligner/final_alignment/Sample_S06-9841_A4_primary/Aligned.out.sam OUTPUT=./Sample_S06-9841_A4_primary/S06-9841_A4_primary_rg.bam SORT_ORDER=coordinate RGID=S06-9841_A4_primary RGLB=lib RGPL=Illumina RGPU=none RGSM=Sample_S06-9841_A4_primary
我尝试了各种不同的选项,例如将-Xmx参数增加到20g,删除MaxPermSize参数(我还尝试将其降低到256m)。我没有使用UseCompressedOops参数运行它

我以前运行过这个脚本(没有MaxPermSize和UsedCompressedOops参数),并且没有任何问题,所以我不确定为什么在这个示例上它不会运行

有没有人对这个问题还有其他想法?你认为我的bam文件有问题吗

注意:我确实在输出目录中收到一个文件,但它是空的

谢谢,


java中的Leslie

数组受到以下事实的限制:数组索引的类型为
int
,并且索引必须为正(以及数组大小)

但是VM中可能存在限制,阻止使用大小为Integer.MAX_值((2^31)-1)的数组;确切的最大值似乎是特定于VM的实现。因此,当请求的数组长度为Integer.MAX_值或非常接近该值时,VM可能会抛出您得到的异常。请注意,无法通过为VM分配更多内存来解决此问题,因为这是VM实现方式造成的限制

更糟糕的是,据我所知,JDK中没有常数/方法可以实际指示VM支持的实际最大数组大小;因此,在这种情况下,硬编码是安全的

有一种方法可以防止程序试图通过更改其参数来分配该大小的数组。您最好直接从与您的软件相关的供应商/帮助论坛寻求帮助。切换到不同的虚拟机(版本或供应商)也可以解决问题;如果另一个VM真的支持最大大小的数组