修改eclipse运行时的JVM内存

首先,自己做实验玩时,发现一个不得了的东西。

首先统一一下,int的范围是[-2^31,2^31-1]; 当不对写出的整数进行说明时,默认就是int类型。那么,在声明数组时,byte[1024*1024]其中1024*1024默认是int类型。

下面我们进入正题:
如下,申请一个1T大的byte数组

byte[] arr =new  byte[1024*1024*1024*1024];
//这里没有抛出任何错误,这个不难想吧!输出来看看就知道了
System.out.println(1024*1024*1024*1024);
//结果是0,为什么那?因为超过了int的表示范围呗。

//不行,我非要申请一个1T大的数组怎么办?突发奇想,int表示不开,使用long不行吗?
long len = 1024l*1024l*1024l*1024l
byte[] arr = new byte[len];
//嘿嘿,智障了~ 数组的声明只能是使用int

那么我们就申请在整数范围内的byte数组

byte[] arr = new byte[1024 * 1024 * 1024 * 1 ];
//申请1G的数组,哇,竟然成功了,而且经过测试,可以使用
byte[] arr2 = new byte[1024 * 1024 * 1024 * 2 -1 ];
//申请int所能表示最大的数组(2G-1B)。嗯?这次有错误了

错误信息

//那我不这么弄了,我分批进行申请
byte[] arr = new byte[1024 * 1024 * 1024 * 1 ];
byte[] arr2 = new byte[1024 * 1024 * 1024 * 1 ];
//第二个数组申请出错了

话说还真有点神奇~两次的异常信息竟然是不一样的。
第二次错误

算了~好玩归好玩~但是,不知道是什么鬼

那么,怎么知道JVM默认的内存大小那?
作者比较笨,采用了“二分查找法”(手动二分)
(仅仅限于作者的机器上,8G内存、jdk和jre均是1.8)

byte[] arr1 = new byte[1024 * 1024 * 1024];// 1G
byte[] arr2 = new byte[1024 * 1024 * 162];//162M
//不会报错

byte[] arr1 = new byte[1024 * 1024 * 1024];// 1G
byte[] arr2 = new byte[1024 * 1024 * 163];//163M
//会报错

那么,结论就是,JVM的默认内存大小是1G+162M。(好奇怪~为什么~)

下面介绍修改JVM内存的方法

  • 修改配置文件,这种方式针对所有的java程序
    修改eclipse的配置文件eclipse.ini,这个文件在eclipse的根目录下面
    修改eclipse运行时的JVM内存_第1张图片
    打开后,发现

    -Xms256m
    -Xmx1024m

    先说明一下,这两个参数的作用
    -Xms256m说的是JVM启动时初始的内存大小
    -Xmx1024m说的是JVM允许的最大内存

    * 这就使我感到奇怪的地方,为什么最大允许1G,而我能申请到1G+162M的内存。

    算了,反正在这里可以修改内存的大小。

  • 还有一种方法,这是针对当前要执行的java程序
    Run >> Run Configurations… >> Arguments
    在VM arguments中输入 -Xmx2048M

    修改eclipse运行时的JVM内存_第2张图片

上面出现的问题,目前还解决不了啊~希望dalao可以指点一二~

你可能感兴趣的:(eclipse)