JVM相关知识2

目录

G1垃圾收集器的步骤

ZGC是什么?

JVM中的安全点和安全区域

什么是字节码?

类文件的结构

类的生命周期

装载阶段主要做了什么事情?

初始化阶段中哪几种情况必须对类初始化?

双亲委派模型是什么?,有什么优缺点?


G1垃圾收集器的步骤

1.年轻代GC (Young GC)
 
2.老年代并发标记过程 (Concurrent Marking)
 
3.混合回收(Mixed GC)
 
4.(如果需要,单线程、独占式、高强度的Full GC还是继续存在的。它针对GC的评估失败提供了一种失败保护机制,即强力回收。)

ZGC是什么?

是一款基于Region内存布局的,(暂时)不设分代的,使用了读屏障、染色指针和内存多重映射等技术来实现可并发的标记-压缩算法的,以低延迟为首要目标的一款垃圾收集器。

JVM中的安全点和安全区域

安全点:程序执行时并非在所有地方都能停顿下来开始 GC,只有在特定的位置才能停顿下来开始GC,这些位置称为“安全点(Safepoint)”。

安全区域:安全区域是指在一段代码片段中,对象的引用关系不会发生变化,在这个区域中的任何位置开始GC都是安全的。我们也可以把 Safe Region 看做是被扩展了的 Safepoint。

什么是字节码?

源代码经过编译器编译之后便会生成一个字节码文件,字节码是一种二进制的类文件,它的内容是JVM的指令,而不像C、C++经由编译器直接生成机器码。

类文件的结构

魔数
Class文件版本
常量池
访问标识(或标志)
类索引,父类索引,接口索引集合
字段表集合
方法表集合
属性表集合

类的生命周期

过程一:Loading(装载)阶段

过程二:Linking(链接)阶段

过程三:Initialization(初始化)阶段

过程四:类的Using(使用)

过程五:类的Unloading(卸载)

装载阶段主要做了什么事情?

将Java类的字节码文件加载到机器内存中,并在内存中构建出Java类的原型——类模板对象。

初始化阶段中哪几种情况必须对类初始化?

1. 当创建一个类的实例时,比如使用new关键字,或者通过反射、克隆、反序列化。
2. 当调用类的静态方法时,即当使用了字节码invokestatic指令。
3. 当使用类、接口的静态字段时(final修饰特殊考虑),比如,使用getstatic或者putstatic指令。
4. 当使用java.lang.reflect包中的方法反射类的方法时。比如:Class.forName("com.atguigu.java.Test")
5. 当初始化子类时,如果发现其父类还没有进行过初始化,则需要先触发其父类的初始化。
6. 如果一个接口定义了default方法,那么直接实现或者间接实现该接口的类的初始化,该接口要在其之前被初始化。
7. 当虚拟机启动时,用户需要指定一个要执行的主类(包含main()方法的那个类),虚拟机会先初始化这个主类。

双亲委派模型是什么?,有什么优缺点?

如果一个类加载器在接到加载类的请求时,它首先不会自己尝试去加载这个类,而是把这个请求任务委托给父类加载器去完成,依次递归,如果父类加载器可以完成类加载任务,就成功返回。只有父类加载器无法完成此加载任务时,才自己去加载。

优点:

1.避免类的重复加载,确保一个类的全局唯一性

2.保护程序安全,防止核心API被随意篡改

缺点:顶层的ClassLoader无法访问底层的ClassLoader所加载的类

  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值