运行时数据区-堆和方法区
2022-08-13 16:51:58 0 举报
java基础
作者其他创作
大纲/内容
静态变量
1.我们日常中随便一个main方法都需要加载很多个系统类,我们不可能每次都去加载一遍这些公共的类,所以常量池就出现了,在类加载之后开始运行的时候将常量池放到方法区就是运行时常量池了2.数值,字符串值,类引用,字段引用,方法引用3.为每个类维护一个运行时常量池
伊甸园(Eden)
to(S1)
实例数据
方法区
TLAB2
老年代
1.在jdk7时称为永久代,jdk8之后废弃了永久代概念称之为元空间,元空间是在本地内存开辟的不在虚拟机内存开辟空间2.static final修饰的域信息,在编译时就已经将值写进去了3.只有static修饰的域信息,在加载中阶段初始化的时候才会写值4.jdk8之后静态变量和字符串常量池放在堆中,但是类描述等信息还在方法区中(元空间)5.因为开发过程中会创建大量的字符串,生命周期又不是很长,放在永久代中很难进行垃圾回收,所以将其放在堆中,以便于回收6.方法区垃圾回收主要是一些无用的常量和不用的类型信息
对齐填充
方法信息
from(S0)
字符串常量池
1.类的成员变量2.域的类型,修饰符,等
1.经过逃逸分析,如果一个对象并没有逃逸出本方法的时候,可以认为该对象可能被优化为在栈上分配空间2.逃逸:是指方法内的对象是否有可能在方法外被使用,如果有被方法外引用了,则发生了逃逸3.使用-XX:+DoEscapeAnalysis参数开启逃逸分析,如果对象没有发生逃逸则可能会在栈上分配空间4.同步省略:去掉不必要的同步代码块5.标量替换:6.因为这项技术还不是很成熟,所以jvm中并没有使用这项技术,对象还是都分配在堆上的
运行时常量池
类型指针
TLAB3
JIT代码缓存
类的描述信息1.全类名2.父类全类名3.类的修饰符4.类实现接口的有序列表
类型信息
域信息(类属性)
Mark Word
TLAB1
0 条评论
回复 删除
下一页