随笔-0  评论-2  文章-61  trackbacks-0

对比一下两个简单的Java程序:

//filename: Test1.java
public class Test1 {
    public static void main(String[] args) {
        System.out.println("start");
 
       float[][][][] flt = new float[540][144][73][1];

        System.out.println("finish");
    }
}

//filename: Test2.java
public class Test2 {
    public static void main(String[] args) {
        System.out.println("start");
 
       float[][][][] flt = new float[540][144][73][1];
 
       System.out.println("finish");
    }
}

    两个程序没有太大的区别,都是为一个float型的四维数组分配内存。计算一下:float占用4 byte的内存,所以这样一个四维数组理论上需要占用4*540*144*73/1024/1024=21.6MB左右的内存,java执行程序时候,默认的是使用64MB的内存,除非使用-Xmx参数这定,若超过64MB,则会抛出(throw)一个异常:
    Exception in thread main java.lang.OutOfMemeryError: Java heap space
说明程序需要的内存超过了64MB。以上两个程序我分别在WindowsXP SP1  JDK1.5版本下面编译运行过了,Test1.java会出错,若用java -Xmx128m Test1.java则可以通过,不过内存占用很高,机器会停顿一会。而Test2.java则比较正常,只用20多MB的内存

    结论:虽然不清楚里面的问题所在,不过以后在处理多维数组的时候尽量将维数大的放在后面。

    此问题有待研究,也希望高手指点。
转:http://miniufo.bokee.com/4546858.html

posted on 2006-12-22 08:59 comchyi 阅读(235) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: