JVM
2022-11-10 10:58:10 1 举报
JVM、JMM
作者其他创作
大纲/内容
对象地址
类加载器
本地方法栈
修改
对象头header
full GC
方法区 (元空间)
对象组成
字节码执行引擎
1 hello
局部变量是对象类型,局部变量表存放的是对象的内存地址,对象指针会指向堆内存
STW会导致系统卡顿响应变慢,那为什么还要设计STW?为了保证当前GC的对象状态不要发生变化。假设stw不停掉用户线程,如果用户线程已经完成,但是GC线程还未完成,那GC永远也无法结束。(因为某个用户线程结束,非垃圾对象就会被释放变为垃圾对象,在进行GC的时候会出现这个对象一会儿是非垃圾一会儿是垃圾的情况,永远也回收不完)
可达性分析算法(寻找非垃圾对象)根据“gc root”对象作为起点对象,向下搜索引用对象,找到的对象标记为非垃圾对象,其余未标记对象为垃圾对象,可回收。
1
2 b
hello()栈针
0 this
新生代(1/3)
操作数栈
虚拟机栈
实例数据
本地接口
局部变量表
虚拟机栈(线程)
minor GC
供操作数临时做运算的中转空间
1 a
记录方法执行完之后需要执行的代码位置,返回代码的现场信息
对齐填充(保证对象为8字节整倍数)
多线程切换,记录地址位置
对象分代年龄信息存在对象内部的对象header头中
JVM虚拟机
新生代eden(8/10)
使用的是物理内存常量静态变量类元信息(类信息)
user
s1(1/10)
程序计数器
运行时数据区(内存模型)
Hello.java
本地库
STWStop-The-World是在垃圾回收算法执⾏过程当中,暂停用户线程,将JVM内存冻结丶应用程序停顿的⼀种状态。jvm调优是为了减少GC次数和GC的时间,减少STW,减少暂停掉用户线程的时间。增加系统吞吐量,提高性能响应更快。
方法区静态变量如果是个对象,那元空间的静态变量的值存放的是对象的内存地址,对象指针会指向堆内存
堆
执行
符号对应的方法代码在方法区的内存地址
s0(1/10)
虚拟机栈包含四个模块
栈针
垃圾收集线程
hello
main线程
互换15次
15
不是java实现的本地方法,Java内部使用
方法出口
main()栈针
Hello.class
动态链接
老年代(2/3)
Survivor区
1、长期存活的对象2、大对象直接进入老年代3、对象动态年龄判断4、老年代空间分配担保机制
major GC
0 条评论
下一页