jvm 内存分配的方法和支持的最大内存

本文介绍了在Java开发中遇到的JVM内存分配问题,探讨了Windows和Linux环境下JVM内存分配的限制,通常Windows不超过2G,Linux难以超过3G。同时分享了在Eclipse和NetBeans中设置JVM参数的方法,以及提供了一个测试内存分配的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


在做java开发时,为了优化,想把jvm的内存设置大点!但在设置过程中遇到了些怪异的问题。

我用的服务器是server2003版本的,内存有8G,原本我想分jvm 2G内存,在分配的时候一直报could not reserve enough space for object heap

奇怪了,明明有8G内在,怎么才分2G又说没有足够的空间呢?

抱着这个问题,查找了一些资料,其中根据http://wangdei.javaeye.com/blog/204616 文章中的方法测试了下JVM能分配到的空间,结果如下:

测试方法   在CMD的窗口下,输入如下命令: java -Xmx1446m -version   如果不报错,则分配空间成功,如不成功,降低要分配的内存!例如把
java -Xmx1446m -version  修改成 java -Xmx1300m -version 


环境:

java 环境 

java -version
java version "1.6.0_17"
Java(TM) SE Runtime Environment (build 1.6.0_17-b04)
Java HotSpot(TM) Client VM (build 14.3-b01, mixed mode, sharing)

 

MWindows XP Professional
core(TM)2 DUO CPU e7200 @2.53GHz  2.00GB内存

java -Xmx1446m -version    1446M

 

MSwindows Server 2003
Enterprise x64 Edition

core(TM)2 DUO CPU e5520 @2.27GHz  2.26GHz   7.99GB内存
java -Xmx1592M -version     1592M

 

在linux下:

java 环境 

java version "1.6.0_17"
Java(TM) SE Runtime Environment (build 1.6.0_14-b04)
Java HotSpot(TM) Client VM (build 14.0-b15, mixed mode, sharing)

linux  2.6.9-78.ELsmp    intel xeon   E5405 @ 2.00GHz 4128760kb

java -Xmx2690M -version     2690M

 


然后查找了下文章,一般认为在window下jvm分配的内存突破不了2G  linux下很难突破3G  ,下面是一些国外人的文章
http://stackoverflow.com/questions/1058471/java-refuses-to-start-could-not-reserve-enough-space-for-object-heap
http://www.theserverside.com/discussions/thread.tss?thread_id=26347

另外说下,在Eclipse和NetBeans下配置 jvm参数的方法吧!

Eclipse下,

在要运行的主类下 点右键, 选run as 或者 debug as,选中 run Configurations ... 在弹出的对话框中选 第二个(x)Arguments 在下方的
vm arguments 中输入

-Xms512m -Xmx1024m -XX:+UseParallelGC -XX:+AggressiveOpts -XX:+UseFastAccessorMethods

其中的 512m和1024M分别是最大和最小内存

NetBeans下,

点要运行的项目,点右键,先最后一项 Categories  ,在弹出的对话框里选中run  在右方 的 VM Options  里输入

-Xms512m -Xmx1024m -XX:+UseParallelGC -XX:+AggressiveOpts -XX:+UseFastAccessorMethods

可以用下面的类来测试jvm能开出的内存
public class MemLoadTester {
public static void main ( String[] args ) {

            long rand;
            char cr;
            int  mvm=1024;
            char[] cra = new char[mvm];

            for ( int i=0; i<mvm; i++) {
                rand = 70 + Math.round( Math.random() * 50);
                cr = (char) rand;
                cra[i] = cr;
            }

            int entities = 400000;
            int blocksize = 10240;

            String[] zz = new String[ entities];

            // Java char type is 2bytes.
            System.out.println (" Each box indicates the creation of ~40Meg");

            for ( int j=0; j<entities; j++ ) {
                zz[j] = new String( cra );
                if (j != 0 && j % blocksize == 0 ) {
                    System.out.print ( "#" );
                }

                if (j != 0 && j % (blocksize * 10) == 0 ) {
                    System.out.println ( "" );

                }

            }

            System.out.println( "/n");
           System.out.println("Success");
        }
   
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值