13518219792

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

Java程序员必备基础结构图

前言

最近看了深入理解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参数配置哈~


当前标题:Java程序员必备基础结构图
网站URL:http://cdbrznjsb.com/article/dpcdpic.html

其他资讯

让你的专属顾问为你服务