当前位置:首页 > 虚拟机 > 正文

java虚拟机堆大小多少合适


一、java中怎样设置虚拟机的内存大小如果你的程序是可运行的jar包,可以使用:
java-server-Xmx3550m-Xms3550m-Xss128k-XX:NewRatio=4-XX:SurvivorRatio=4-XX:MaxPermSize=16m-XX:MaxTenuringThreshold=
如果是tomcat:
修改TOMCAT_HOME/bin/
前面的cygwin=false。
JAVA_OPTS="-server-Xmx3550m-Xms3550m-Xss128k-XX:NewRatio=4-XX:SurvivorRatio=4-XX:MaxPermSize=16m-XX:MaxTenuringThreshold=0"
以下内容参数说明:
-Xmx5g:设置JVM最大可用内存为5G。
-Xms5g:设置JVM初始内存为5G。该值可以设置为与-Xmx相同,以避免每次垃圾回收后JVM重新分配内存。
-Xmn2g:设置年轻代大小为2G。整个堆内存大小=年轻代大小+老年代大小+持久代大小。持久代一般固定大小为64m,因此增加年轻代会减少老年代的大小。该值对系统性能影响很大。Sun官方建议将其配置为整个堆的3/8。
-XX:+UseParNewGC:设置年轻代为并行收集。可与CMS采集同时使用。对于JDK5.0及以上版本,JVM会根据系统配置自行设置,因此无需设置该值。
-XX:ParallelGCThreads=8:配置并行收集器的线程数,即有多少个线程可以同时进行垃圾收集。该值最好配置为等于处理器的数量。
-XX:SurvivorRatio=6:设置年轻代中Eden区和Survivor区的大小比例。根据经验,如果设置为6,则2个Survivor区与1个Eden区的比例为2:6,1个Survivor区占整个年轻代的1/8。
-XX:MaxTenuringThreshold=30:设置垃圾的最大年龄(次数)。如果设置为0,年轻代对象将直接进入老年代,不经过Survivor区。对于老年代数量较多的应用,可以提高效率。如果将该值设置为较大的值,则年轻代对象会在Survivor区被多次复制,这样可以增加对象在年轻代中的生存时间,增加在年轻代中被回收的概率。设置为30意味着如果一个对象在Survivor空间中移动了30次而没有被回收,那么它就会被放入老年代。
-XX:+UseConcMarkSweepGC:设置老年代进行并发收集。经过测试并配置该参数后,参数-XX:NewRatio=4失效。因此,此时最好使用-Xmn来设置年轻代大小,因此不建议使用该参数。


二、java虚拟机内存因程序需要已确定在2—4G范围内,请问怎样分配该内存较好。请各位大神给出几套方案!

适合的就好,不要盲目添加参数。

1.首先,建议设置-Xms和-Xmx一致性,并将值设置为2G/4G。不要忘记添加-server参数,即在服务器上提供以下参数。启动命令行

java-server-Xms2000m-Xmx2000m

2.上面已经完成了基本的JVM设置。此时测试JVM并添加JVMgc参数,分析内存使用情况。

java-server-Xms2000m-Xmx2000m-Xloggc:$CATALINA_HOME/logs/

3.使用HPjmter或jprofile进行配置。JVM内存重启日志分析。查看内存瓶颈在哪里,进行相应的分析和调整。不应意外调整此性能设置。盲目调整会带来负面后果。如果您不知道上述软件,请GIRL使用。