日期:2014-05-20  浏览次数:20736 次

java里new两个二维int数组的问题
我new了两个二维int数组 大小均为一百五十多万*48 结果初始化完第一个 然后new第二个数组就java.lang.OutOfMemoryError了 JVM大小设为1024M 是不是无法同时申请这么大的两个数组的内存空间?

------解决方案--------------------
呃 你这数据也new得太大了吧………… 内存直接溢处了……这不是因为无法同时申请,而是
因为JVM物理内存过小。默认的Java虚拟机最大内存仅为64兆,这在开发调试过程中可能没有问题,但在实际的应用环境中是远远不能满足需要的,除非你的应用非常小,也没什么访问量。否则你可能会发现程序运行一段时间后包java.lang.OutOfMemoryError的错误。因此我们需要提升resin可用的虚拟机内存的大小。
解决:
修改/usr/local/resin/bin/httpd.sh中的args选项
添加参数-Xms(初始内存)和-Xmx(最大能够使用内存大小)
可以用来限制JVM的物理内存使用量。
例如:
args="-Xms128m -Xmx256m"
设置后,JVM初始物理内存是128m,最大能使用物理内存为256m。

------解决方案--------------------
这个问题有意思,静待高手解答。
------解决方案--------------------
关注一下没试过这么大的
------解决方案--------------------
以下是我做的测试
Java code

public static void main(String[] args) {
        int a[][] = new int[1600000][50];
        int b[][] = new int[1600000][50];
        System.out.println(a);
        System.out.println(a);
        //输出以下结果
        //[[I@276af2
        //[[I@276af2
    }

------解决方案--------------------
用查询分页吧,每次取出的数据够看就行。让数据库多查询几次而己。
------解决方案--------------------
应该从算法设计上把问题分散成小问题, 最后再把结果想办法组合起来, 避免使用这种数据结构.
或者使用第三方的解决方案, 提高java的内存空间, 比如Terracotta的big memory
------解决方案--------------------
为什么要用到这么大的二维数组呢