JVM虚拟机底层详解

jvm

 

  • 类加载器:加载通过编译的字节码文件对象,把这个字节码文件加载到内存中

  • 字节码执行引擎:解析字节码文件,以及执行命令

  • 本地方法栈:管理本地方法,可以通过本地方法来访问虚拟机的运行时数据区

  • 程序计数器:记录程序运行的状态

  • 元空间:永生代;存放生命周期较长的变量和类信息

  • 栈:先进后出的一种线性存储空间,由系统自动分配

  • 堆:由用户自己申请的动态内存空间;

    1. 年轻代1/3:eden初生区8 minor gc,幸存区2,survivor

    2. 老年代2/3 对象按生命周期从初生代往老年代转移,在使用结束后从堆中释放内存

 

GC垃圾回收:

  • Cms:垃圾回收机制 采用标记整理回收机制

  • Gc:通过三色标记算法,对目标的可达性进行标记,对不可达目标进行回收在任务开始时,所有对象都是白色,先将根下所有访问过的对象标记为黑色,将所有引用对象标记为灰色。在任务结束后,所有已经完全访问的黑色标记对象,和所有完全不被访问的白色对象将被回收释放空间。

在年轻代中发生的垃圾回收称作minor GC / young GC,回收非常频繁并且回收速度快

在老年代中发生的垃圾回收称作full GC / Major GC,速度非常慢且占内存

(占用大内存的大对象和长期存在的对象会直接进入老年代)

 

GC 执行垃圾回收的阶段?

  • 1.显式调用回收方法

  • 2.老年代空间不足,发生full gc

  • 3对象长期存在,在计数器达到一定次数后;新生代空间不足,发生 minor gc

  • 4.存放大对象,内存不足会直接放进老年代,触发full gc

  • 5.元空间空间不足

动态回收:

触发对象动态判断的条件时机?

在经过minor gc后,存放在survivor中的对象年龄会逐渐增长,当内存相加后大于survivor的50%后,survivor中会进行年龄判断,年龄从小到大(1-n)的对象的个数大于50%,其他年龄大于n的对象就会被直接转移到老年代。该方法实质上是为了将长期存活的对象尽早释放内存。

 

jvm调优

一般是通过显式增加新生代的内存空间,以提高minor GC的次数来减少full GC的次数。 Full GC会占用较大的内存和性能

-Xmx7168m 堆最大空间

-Xms7168m 堆最小空间

-Xmn3584m 年轻代空间

-Xss512k 每个线程的栈堆大小

-XX:+UseG1GC cms垃圾回收机制

-XX:NewRatio=1

-XX:SurvivorRatio=6

-XX:TargetSurvivorRatio=60

-XX:MetaspaceSize=2048m 元空间内存

-XX:MaxMetaspaceSize=2048m 元空间最大内存

-XX:ReservedCodeCacheSize=2048m

-XX:SoftRefLRUPolicyMSPerMB=200

-XX:CICompilerCount=6

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值