java面试思维导图,你的图!面试不要再问我JVM了!思维导图解析JVM结构

背景

面试官:请你谈谈你对JVM的理解?

面试者:xxx

面试官:详细jvm内存模型

面试者:xxx

面试官:说说Java线程栈?

面试者:xxx

面试官:各种回收算法?

面试者:xxx

面试官:谈谈你在工作中怎么对JVM优化?

面试者:xxx

是不是比较耳熟?JVM在各种面试中被问了无数次,难道每次面试前都要准备这些东西?

面试造火箭,工作拧螺丝?

60a9419236d84187502c33941b47813c.png

真实的JVM

那我们把整个jvm的过程连接起来吧!jvm的架构图如下

91db4e2df3310192a9ebaafc73969b15.png

第一步:classloader加载class 文件,链接和初始化

第二步:运行时区分配heap,方法区和stack

第三步:执行引擎先解释,编译后调用本库地方法执行

思维导图解析核心的运行时数据区

线程是一个程序里的运行单元。JVM允许一个应用有多个线程并行的执行。在Hotspot JVM里,每个线程都与操作系统的本地线程直接映射。在一个Java线程准备好了所有的状态后,比如线程本地存储,缓存分配,同步的对象,栈以及程序计数器,这时一个操作系统中的本地线程也同时创建。当Java线程终止后,本地线程也会回收。操作系统因此负责所有线程的安排调度到任何一个可用的CPU上。一旦本地线程初始化成功,它就会调用Java线程中的run()方法。当run()方法返回,发生了未捕获异常,Java线程终止,本地线程就会决定是否JVM也应该被终止(是否是最后一个非守护线程) 。当线程终止后,本地线程和Java线程持有的资源都会被释放。

帧栈Frame用来存储数据和部分结果的数据结构,同时也用来处理动态链接,方法返回值和异常分配;

帧栈随着方法调用而创建,随着方法结束而销毁--无论方法时正常完成还是异常完成都算作方法结束。

首先heap区

ac2f0f6153f200b280076e4ba3f566cb.png

heap在虚拟机启动时创建,供所有类实例和数组对象分配内存的区域。

然后stack区

53106880790e199eb5ee644ffc1a9e53.png

栈与线程同时创建,用于存储栈帧Frame,用于存储局部变量与一些尚未算好的结果。

最后方法区

aac8c070be5fe3fdfd8a3c363fe863bd.png

方法区在虚拟机启动的时候创建

大图,可以关注我,然后@我获取

37addcc2004d9143ceca4f108ac0f9fc.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值