黑马程序员技术交流社区

标题: Java程序员必备基础图 [打印本页]

作者: 逆风TO    时间: 2020-5-4 16:11
标题: Java程序员必备基础图
本帖最后由 逆风TO 于 2020-5-4 16:14 编辑

前言最近看了深入理解Java虚拟机第三版,整理了一些基础结构图,算是比较全的了,做一下笔记,大家一起学习。
1.Java虚拟机运行时数据区图
JVM内存结构是Java程序员必须掌握的基础。
程序计数器
Java虚拟机栈
本地方法栈
Java堆
方法区
2. 堆的默认分配图

3.方法区结构图

方法区是各个线程共享的内存区域,它用于存储已被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等数据。
4.对象的内存布局图

一个Java对象在堆内存中包括对象头、实例数据和补齐填充3个部分:
5.对象头的Mark Word图
">
6.对象与Monitor关联结构图
">
对象是如何跟monitor有关联的呢?
一个Java对象在堆内存中包括对象头,对象头有Mark word,Mark word存储着锁状态,锁指针指向monitor地址。这其实是Synchronized的底层哦~
7.Java Monitor的工作机理图:Java 线程同步底层就是监视锁Monitor~,如下是Java Monitor的工作机理图:
">
8.创建一个对象内存分配流程图

9.可达性分析算法判定对象存活可达性分析算法是用来判断一个对象是否存活的~

算法的核心思想:
10.标记-清除算法示意图

11.标记-复制算法示意图

12.标记-整理算法示意图

13.垃圾收集器组合图

14.类的生命周期图

一个类从被加载到虚拟机内存开始,到卸载出内存为止,这个生命周期经历了七个阶段:加载、验证、准备、解析、初始化、使用、卸载。
加载阶段:
验证:
准备
解析
初始化
15.类加载器双亲委派模型图

双亲委派模型构成
启动类加载器,扩展类加载器,应用程序类加载器,自定义类加载器
双亲委派模型工作过程是
如果一个类加载器收到类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器完成。每个类加载器都是如此,只有当父加载器在自己的搜索范围内找不到指定的类时(即ClassNotFoundException),子加载器才会尝试自己去加载。
为什么需要双亲委派模型?
如果没有双亲委派,那么用户是不是可以自己定义一个java.lang.Object的同名类,java.lang.String的同名类,并把它放到ClassPath中,那么类之间的比较结果及类的唯一性将无法保证,因此,双亲委派模型可以防止内存中出现多份同样的字节码。
16.栈帧概念结构图
">
栈帧是用于支持虚拟机进行方法调用和方法执行背后的数据结构。栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回地址信息。
局部变量表
操作数栈
动态连接
方法返回地址
17.Java内存模型图

18.线程状态转换关系图
Java语言定义了6种线程池状态:
19. Class文件格式图

20.JVM参数思维导图

JVM调优是通往高级开发的必经桥梁,所以好好积累JVM参数配置哈~


转自
链接:https://juejin.im/post/5ea8b6d9f265da7be959ef5c







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2