JVM的年轻代和老年代的基础知识。

  java堆内存空间,分为年轻代,老年代。
  注意永久代并不是存放在堆内存,是方法区的一种实现,而且jdk1.7以后移除了永久代的说法,改为元空间。元空间存放在内存中,永久代在虚拟机中,这样做的好处,不容易内存溢出。

年轻代和老年代的默认比例 1:2 ,修改参数-XX:NewRatio
年轻代分 eden, (survive)from ,to :默认占比:8:1:1 ,修改参数:-XX:SurvivorRatio,默认值为8,改为4就是4:1:1

下面简单说一下minor gc,major gc以及full gc.

1.minor gc (年轻代gc),当年轻代的eden区满了以后,会进行第一次Minor gc
2.minor gc后,仍然存活的会进入from区,对该对象进行标记次数+1
3.第二次GC,gc对象为EDen+From,Gc后仍然存活对象入To区,标记次数+1.同时清理From区域所有对象。
4…以此类推,不停的gc eden + from或者 eden + to 对象,如果对象存活次数超过15(默认15次,-XX:MaxTenuringThresHold)
进入老年代。
5.以上为年轻代的GC,下面是老年代major Gc
6.major gc很简单,满了就GC,major gc 会触发full Gc.
7.l另外大对象需要分配较大连续空间,则直接进入老年代。

8,注意不论是MINOR Gc 还是Major Gc 都会触发STW(stop to world),stop the world指的是GC事件发生过程中,会产生应用程序的停顿。停顿产生时整个应用程序线程都会被暂停,没有任何响应, 有点像卡死的感觉,这个停顿称为STW。Java中一种全局暂停现象,全局停顿,所有Java代码停止,native代码可以执行,但不能与JVM交互;这些现象多半是由于gc引起。
但是 minor Gc所占用的时间要远远低于full Gc,*所以性能优化的重点,就是要减少FULL GC的频率。
*尽量减少对象的使用,或者合理分配对象空间,是中高级程序员需要思考的问题。
实践基于理论,理论服务实践,这个是我们学习理论知识的价值所在。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值