JVM堆大小的调整

Sun HotSpot 1.4.1使用分代收集器,它把堆分为三个主要的域:新域、旧域以及永久域。Jvm生成的所有新对象放在新域中。一旦对象经历了一定数量的垃圾收集循环后,便获得使用期并进入旧域。在永久域中jvm则存储class和method对象。就配置而言,永久域是一个独立域并且不认为是堆的一部分。
  

  • 可使用-Xms和-Xmx 控制整个堆的原始大小或最大值。
  • 为控制新域的大小,可使用-XX:NewRatio设置新域在堆中所占的比例。
    下面的命令把整个堆设置成128m,新域比率设置成3,即新域与旧域比例为1:3,新域为堆的1/4或32M:
–Xms128m
–Xmx128m
–XX:NewRatio =3
  • 可使用-XX:NewSize和-XX:MaxNewsize设置新域的初始值和最大值。
    下面的命令把新域的初始值和最大值设置成64m:
–Xms256m
–Xmx256m
–Xmn64m
  • 永久域默认大小为4m。运行程序时,jvm会调整永久域的大小以满足需要。每次调整时,jvm会对堆进行一次完全的垃圾收集。
    使用-XX:MaxPerSize标志来增加永久域搭大小。在WebLogic Server应用程序加载较多类时,经常需要增加永久域的最大值。当jvm加载类时,永久域中的对象急剧增加,从而使jvm不断调整永久域大小。为了避免调整,可使用-XX:PerSize标志设置初始值。
    下面把永久域初始值设置成32m,最大值设置成64m。
-Xms512m
-Xmx512m
-XX:PermSize=32m
-XX:MaxPermSize=64m
  • 默认状态下,HotSpot在新域中使用复制收集器。该域一般分为三个部分。第一部分为Eden,用于生成新的对象。另两部分称为救助空间,当Eden充满时,收集器停止应用程序,把所有可到达对象复制到当前的from救助空间,一旦当前的from救助空间充满,收集器则把可到达对象复制到当前的to救助空间。From和to救助空间互换角色。维持活动的对象将在救助空间不断复制,直到它们获得使用期并转入旧域。使用-XX:SurvivorRatio可控制新域子空间的大小。
    同NewRation一样,SurvivorRation规定某救助域与Eden空间的比值。比如,以下命令把新域设置成64m,Eden占32m,每个救助域各占16m:
-Xms256m
-Xmx256m
-Xmn64m
-XX:SurvivorRation =2
  • 如前所述,默认状态下HotSpot对新域使用复制收集器,对旧域使用标记-清除-压缩收集器。在新域中使用复制收集器有很多意义,因为应用程序生成的大部分对象是短寿命的。理想状态下,所有过渡对象在移出Eden空间时将被收集。如果能够这样的话,并且移出Eden空间的对象是长寿命的,那么理论上可以立即把它们移进旧域,避免在救助空间反复复制。但是,应用程序不能适合这种理想状态,因为它们有一小部分中长寿命的对象。最好是保持这些中长寿命的对象并放在新域中,因为复制小部分的对象总比压缩旧域廉价。为控制新域中对象的复制,可用-XX:TargetSurvivorRatio控制救助空间的比例(该值是设置救助空间的使用比例。如救助空间位1M,该值50表示可用500K)。该值是一个百分比,默认值是50。当较大的堆栈使用较低的sruvivorratio时,应增加该值到80至90,以更好利用救助空间。用-XX:maxtenuringThreshold可控制上限。

    为放置所有的复制全部发生以及希望对象从eden扩展到旧域,可以把MaxTenuring Threshold设置成0。设置完成后,实际上就不再使用救助空间了,因此应把SurvivorRatio设成最大值以最大化Eden空间,设置如下:

“`
-XX:MaxTenuringThreshold=0
–XX:SurvivorRatio=50000

时间: 2024-08-01 16:26:05

JVM堆大小的调整的相关文章

《JVM故障诊断指南》之2 —— 调整合适的Java堆大小的技巧

原文链接 原文作者:Byron Kiourtzoglou 翻译:梅小西(904516706) 在生产系统上决定合适的Java堆大小不是一个容易的操作.许多性能问题的发生都是由于不恰当的Java堆容量的错误调整.这部分将从介绍一些技巧作为开头,它能帮助你在当前的或者新的生产系统上决定最佳的Java堆大小.其中一些技巧对预防OutOfMemoryError问题和内存泄露方面也同样有用. 请注意这些技巧是倾向于"帮助你"决定合适的Java堆大小.因为每一个IT环境都不相同,实际上你是处于最好

heap-输入mvn提示堆大小超过最大值

问题描述 输入mvn提示堆大小超过最大值 maven安装好后配置好了环境变量 在控制台想要验证安装好了没有 输入mvn 输出下面的提示 Error occurred during initialization of VM Initial heap size set to a larger value than the maximum heap size 在google搜了下没有找到遇到一样情况的人 stackoverflow也找不到相近的情况 这和setting文件有关嘛遇到的粗来解答下谢谢了

【转】Linux 下修改Tomcat使用的JVM内存大小

转自  : http://blog.csdn.net/sully2008/article/details/6457570   我的服务器的配置:  # OS specific support.  $var _must_ be set to either true or false. JAVA_OPTS="-Xms1024m -Xmx4096m -Xss1024K -XX:PermSize=512m -XX:MaxPermSize=2048m"   正文:   常见的内存溢出有以下两种:

深入理解Java之JVM堆内存分配

Java堆是被所有线程共享的一块内存区域,所有对象和数组都在堆上进行内存分配.为了进行高效的垃圾回收,虚拟机把堆内存划分成新生代.老年代和永久代(1.8中无永久代,使用metaspace实现)三块区域. Java把内存分成两种:栈内存和堆内存.关于堆内存和栈内存的区别与联系.简单的来讲,堆内存用于存放由new创建的对象和数组,在堆中分配的内存,由java虚拟机自动垃圾回收器来管理.而栈内存由使用的人向系统申请,申请人进行管理. 堆内存初始化 Java中分配堆内存是自动初始化的,其入口位于Univ

JavaScript实现两个Table固定表头根据页面大小自行调整

 正如标题所言两个Table固定表头,可根据页面大小自行调整使用JavaScript实现,具体的示例如下,感兴趣的朋友可以参考下  代码如下: <%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Trans

Launchpad图标大小怎么调整?

  Launchpad图标大小怎么调整?Mac OS X 10.10 下采用高分辨率模式下,Launchpad的应用程序图标会变很大,空间比较拥挤,那么我们怎样才能调整Launchpad的图标大小呢?其实可以通过调整Launchpad每一行和每一列图标的数量,来调整Launchpad图标大小. 接下来PC6小编给大家介绍具体方法: 一.首先运行"终端"程序,执行以下命令: 1.调整每一列显示图标数量,7 表示每一列显示7个,在我的电脑上,7个个人觉得比较不错 defaults writ

java堆大小跳跃增加,程序异常,如何定位解决?

问题描述 java堆大小跳跃增加,程序异常,如何定位解决? tomcat程序,linux 64,运行一段时间,测试人员发现服务异常,类似内存溢出. 检查日志,没有outofmemory.重启后,用visualvm远程连接,从内存图中发现, 使用堆的心跳折线正常,但是过一段时间,堆的大小跳了一级,变大了很多,直到达到堆的最大大小.然后使用堆的心跳也不正常,锯齿变得很小,近似一条直线. 测试人员再次报告不正常. 因为堆dump出来之后,前后大小差不多,只有80M,堆大小直冲1.8G了.所以在下接下来

jquery.mobile中的data-icon大小能调整吗? 求 大神解答 急

问题描述 jquery.mobile中的data-icon大小能调整吗? 求 大神解答 急 如题 急 !!! 附求方法 急急急 大神求解

wpf-WPF中,日历控件的大小或者日期选择控件的大小怎么调整?

问题描述 WPF中,日历控件的大小或者日期选择控件的大小怎么调整? 在网上看了不少资料,貌似没有一个很好的答案. 虽然这两个控件都有width和height属性,但是设置之后应该是这个控件所占的控件的大小发生了变化,实际上显示的内容并没有发生变化. 似乎说可以写样式可以实现,但是挺麻烦的,不知道大家有没有遇到过这样的问题,怎么修改这两个控件实际显示的大小?