码迷,mamicode.com
首页 > 其他好文 > 详细

jvm堆内存分布及gc发生的条件

时间:2015-08-20 01:00:39      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:

  jvm虚拟机对内存管理主要体现在堆内存的管理上,我们可以在启动jvm的时候设置jvm对内存大小及调整策略。

  1.jvm启动参数:

    -Xms:jvm启动时初始堆大小。

    -Xmx:jvm堆的最大值。

    -Xss:线程栈大小。

    -Dname=value:jvm全局属性设置。

  jvm启动参数设置有很多,以上只是列举本人接触过的几个参数。

  1)首先,-Xms是jvm启动时堆内存的初始大小,当堆内存不够用时,jvm调整堆大小到-Xmx设置的大小。一般resin这些服务器会把-Xms和-Xmx大小设置一样以避免不必要的内存调整。第一次对这个参数有印象是在刚到公司实习的第二天,公司使用的项目是用maven编译的,在maven配置文件settings.xml中有maven的资源库位置以及编译的各项配置。看完各种新手入门教程之后开始下载部门主工程代码,用maven编译一直通过不了,原因就在于jvm内存不够,当时maven中设置-Xms:256m,-Xmx:256m,显然256m是不够的,-Xmx设置为512m之后就可以编译过了。还有一个问题就是,这里把-Xms和-Xmx设置一样大是不合理的,虽然两个大小设置一样会避免编译主工程的时候jvm调整堆内存大小,但是maven编译其他比较小的项目的时候也要分配512m有些过于浪费,jvm占用过多的内存会让机器很卡的。

  2)-Dname=value这个参数使用的更频繁,在resin的httpd.sh文件中配置这个参数可以在项目启动的时候将指定的域名映射到想要的ip上去,使得调试更为方便。其他作用的设置暂时还不了解。

  

  2.jvm堆内存分布

  第一次接触jvm堆内存是一次代码不小心造成了内存泄露,当时tail了一下resin的jvm.log发现gc和full gc的频率很高,正常情况下tail这个日志很少会有gc或者full gc。看着一条一条jvm日志,完全像是在看另外一个世界的东西。

  jvm堆内存的作用:存放类的实例对象。

  首先,jvm对内存分为新生代(Young)和老年代(Old).

   新生代被划分为三个区域:

      Eden:几乎所有新诞生的java对象存在这个区域。

      From Survivor/To Survivor:经历过gc之后仍然存活且未进入到老年代区域的对象。

  Young和Old大小比例是1:2,Young中Eden:From:To是8:1:1。

先睡觉,未完待续。

 

jvm堆内存分布及gc发生的条件

标签:

原文地址:http://www.cnblogs.com/kniught-ice/p/4743812.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!