JVM课堂小结

1.JDK框架图

JDK框架图

2.JVM屏蔽不同OS在底层硬件与指令上的区别

JVM屏蔽不同OS在底层硬件与指令上的区别

3.Java虚拟机结构

  • 图中橙色区域:线程共享区域
  • 图中紫色区域:线程私有区域

Java虚拟机结构

4.Java代码与对应的JVM指令

  • 程序的方法调用与栈结构契合
  • 一个方法对应一块栈帧内存区域
  • javap -c xxx.class > xxx.txt(字节码反汇编)
  • JVM指令手册

Java代码在这里插入图片描述

5.JVM结构作用与关系

  • 每个线程都有自己的内存空间
  • 程序计数器:当前执行代码的位置(行号)
  • 本地方法栈:native方法(C语言等实现的方法,如线程Thread的start()方法)
  • 操作数栈:简单来说,JVM执行引擎的一个工作区,当一个方法被调用的时候,一个新的栈帧也会随之被创建出来,但这个时候栈帧中的操作数栈却是空的,只有方法在执行的过程中,才会有各种各样的字节码指令往操作数栈中执行入栈和出栈操作。

JVM结构作用与关系

6.JVM堆区结构

  • 年轻代:老年代 = 1:2(默认)
  • Eden:Survivor(From:To) = 8:1:1(默认)

JVM堆区结构图

7.可达性算法分析

  • GC Roots根节点:线程栈的本地变量、静态变量、本地方法栈的变量等等。
  • 将“GC Roots”对象作为起点,从这些节点开始向下搜索引用的对象,找到的对象都标记为非垃圾对象,其余未标记的对象都是垃圾对象。

可达性算法分析

8.Object对象头

  • 分代年龄为15的对象进入老年代。

Object对象头

9.Visaul GC动态图

  • minor GC(清理年轻代)、full GC(清理年轻代+老年代)、堆区中(Eden、Survivor(s)、Old)、元空间(方法区)的内存动态变化情况。
  • jdk > bin > jvisualvm.exe(打开方式)
  • jvisualvm安装visual GC插件
  • Eden区满,minor gc;老年代区满,full gc。
  • Eden–>From–>To–>Old
  • 如果老年代满,对象仍被引用,full gc无法回收,此时,对象继续增加就会造成OOM(内存溢出)。
  • STW:Stop The World(full gc会出现:停止所有用户线程,专心执行GC线程–>用户程序卡顿问题)。

Visual GC动态图

10.案例图解

案例图解1案例图解2

11.案例调优

  • Java调优的目的:减少GC的次数,减少STW的时间,减少STW的发生概率。

JVM调优案例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值