JVM 类加载子系统、运行时数据区、 执行引擎

 目录

 概要

一、类加载子系统(Class Loader)

1.类加载子系统执行流程

2.全盘委派机制

3.双亲委派:

二、运行时数据区(Runtime Data Area)

1.运行时数据区结构

2.线程处理数据时,栈的处理流程示意图

3.JVM 对象的创建过程

4.JVM对象内存结构

 三、垃圾收集器及内存分配策略

1.可达性分析算法

2.回收方法区

2.1废弃的常量

2.2 不再使用的类型

3.垃圾收集算法

3.1 分代收集理论

3.2 标记-清楚算法(Mark-Sweep)

3.3 标记-复制算法

3.4 标记整理算法(Mark Compact)

四、经典垃圾收集器

1.Serial收集器(新生代:标记-复制)

2.ParNew收集器(新生代:标记-复制)

3.Parallel Scavenge收集器(新生代:标记-复制)

4.Serial Old/PS MarkSweep收集器(老年代:标记-整理)

5.Parallel Old收集器(老年代:标记-整理)

6.G1收集器(新生代老年代通用)


 概要

    JVM由三个主要子系统组成

  • 类加载子系统(Class Loader)
  • 类加载子系统(Runtime Data Area)
  • 执行引擎(Execution Engine)

 

 

一、类加载子系统(Class Loader)

 

1.类加载子系统执行流程

 

2.全盘委派机制

当一个ClassLoader加载一个类的时候,除非显示的使用另外一个ClassLoader,该类所依赖和引用的类也由这个ClassLoader载入

3.双亲委派:

 

为什么要使用双亲委派:

1.防止重复加载同一个类,并且类信息不同

2.沙箱机制,让虚拟机更安全

从反向思考这个问题,如果没有双亲委派模型而是由各个类加载器自行加载的话,如果用户编写了一个java.lang.Object的同名类并放在ClassPath中,多个类加载器都去加载这个类到内存中,系统中将会出现多个不同的Object类,那么类之间的比较结果及类的唯一性将无法保证,而且如果不使用这种双亲委派模型将会给虚拟机的安全带来隐患。所以,要让类对象进行比较有意义,前提是他们要被同一个类加载器加载。

二、运行时数据区(Runtime Data Area)

1.运行时数据区结构

 

 

2.线程处理数据时,栈的处理流程示意图

 

3.JVM 对象的创建过程

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值