JVM
2021-07-08 13:54:10 0 举报
JVM只是整理
作者其他创作
大纲/内容
并发垃圾收集器复制算法
标记整理:
类的加载过程
serialold
将符号引用替换为直接引用
将class的二进制字节码加载到内存
ParallelScavenger
虚拟机栈
子类的构造函数
高并发低停顿
serical的多线程复制算法stop the world
JMM:是在底层内存模型的基础上,定义了自己的多线程语义。
来引用+1去引用-1引用0可回收
老年代版本
新生代1/3
无:运行时常量池,,有些常量在运行时产生,开始没有
serial
父类静态变量、方法、代码块
G1整理标记
应用类加载器
ParNew
解析
单线程,采用复制算法,需要stop the world
CMS是为获得最短的停顿时间
标记-整理算法
无用对象,GC必回收
初始化
更无用,用来跟踪GC回收
当前虚拟机正在执行的线程指令地址
分代收集算法
new:复制算法old:标记整理
常量池
JVM内存模型
加载到内存
Eden
类初始化和实例化的区别1、初始化只在类加载的过程中执行一次2、实例化可以执行很多次
扩展类加载器
1、保证类只被加载一次2、保证核心api不被篡改
fromsur
黑:基本类型的包装类对象常量池,,,,长的黑需要包装一下
程序计数器
常:class文件常量池,在编译期间,会有常量存在磁盘中
栈和堆的区别
验证字节流是否符合要求
当一个类加载器收到一个类的加载请求时,并不着急立即去加载而是委托给上层类加载器去加载,直到启动类加载器,也找不到对用的class文件,然后开始往下委托
标记清除:
为类变量分配内存空间,并赋予初始值
以上是私有、以下是公有
双亲委派模型
有引用不一定不会被垃圾回收
一次标记是否标记为垃圾对象
1、虚拟机栈:虚拟机栈是在运行的时候产生的,有引用肯定在用2、常量池3、静态属性4、本地方法栈引用的对象
类加载器
是否存活
验证
强
普通对象引用
老年代2/3
可达性分析
1、自动申请2、足够就分配3、内存空间连续4、效率高
父类的非静态变量和方法
本地方法栈
cup占用高
每个方法的执行都会创建一个栈帧,用来存贮变量、操作数、动态连接
JVM内存结构
二次标记放入队列执行finalized
1、new申请2、遍历链表查3、内存空间不连续4、效率相对低
自定义类加载器
1、字节码可以被反编译,通过自定义类加载器来加密
从GC ROOT开始搜索,找不到引用链的可回收
启动类加载器
可有可无对象,内存不够可以gc掉
软
判断对象是否存活
Parallelold
这些规则也被称为happen-befor规则,主要用来保证线程的可见性
从申请和存储内容两个方面
子类的非静态变量和方法
加载
元数据区
引用计数
引用
白:全局字符串常量池,,,,长的白,不需要封装直接存
父类的构造函数
语义规则
堆
1、单线程规则2、线程start规则3、线程join规则4、监视器规则5、voliate规则6、传递规则
子类静态变量、方法、代码块
对象的 实例和数组
虚
准备
弱
2、非标准的类,需要进行指定方式加载
native方法信息,
Tomcat,打破了双亲委派模型,应用类加载器会优先加载应用目录下的class,加载不了才会委托为父类加载器加载。原因如下:----各个webapp中的class和lib需要相互隔离,多个应用之间不能相互影响---
垃圾回收
tosur
复制算法 将内存按照大小分成相等的两块,每次使用一块,如果使用完了,将还存活的对象复制到另外一块内存上,然后清除这块内存,缺点:内存利用率低
连接
0 条评论
下一页