2.JVM内部模型及优化
文章目录
1、JDK体系结构与跨平台特性介绍
JDK体系结构
JDK图的最上面是java的命令和工具。
下面是JRE就是java的运行时环境-支撑java运行的一些核心类库;JRE有一块重要的东西就是java虚拟机。
java跨平台特性
如上图可以,不论java代码部署在windows还是linux操作系统上,是由不同系统的JDK里面的jvm帮助java转换跨平台需要的指令字节码。
2、JVM内存模型深度剖析
JVM结构组成
栈:线程运行时JVM会分配一块内存存储线程需要的局部变量区域。
栈帧:方法运行时存放方法对应变量的一块栈帧内存区域。
一个栈区域有多快栈帧内存组成,栈帧生成顺序是从下到上的。
方法区:包含常量+静态变量+类信息
jvm为什么会设计一个程序计数器?因为多线程,假设一个线程正在执行一个代码,这时来了一个优先级更高的线程抢占了资源,另一个线程要刮起等它执行完,挂起的线程恢复时可以利用计数器恢复到程序执行的位置。
GC ROOTs根节点:线程的本地变量、静态变量、本地方法的变量等等;
堆:老年代和年轻代比例是2:1,当堆的Eden区对象存储满了之后字节码执行器会调用minor gc,经历过一次gc,分代就会加一,minor gc每执行一次没被回收的变量的分代都会加一,当加到15(最大值)时,就会被移到老年代。
3、从jvisualvm来研究下对象内存流流转模型
wind+R打开运行,输入jvisualvm,打开JDK自带的JVM分析工具,可以看到本地所有打开的jvm进程。默认情况下是没有visual GC插件的,需要在Java VisualVM 工具上安装。
引用变量从Eden区到S0区再到S1区,最终到old区。
4、讲透GC Root与STW机制
STW:Stop The World ,就是停止掉用户线程,用在在使用系统时感觉系统卡顿或者有延迟。
JVM:调优就是减少full gc的时间和次数。
为什么设计STW机制?GC 执行时非垃圾变量在寻找相关引用,如果没有STW机制,当使用这些变量的线程执行结束,变量之间的引用断开,之前的非垃圾变量就成了垃圾变量,这是GC还没结束,相当于这次GC无效,所以在执行GC时,会执行STW。