你的图!面试不要再问我JVM了!思维导图解析JVM结构
背景
面试官:请你谈谈你对JVM的理解?
面试者:xxx
面试官:详细jvm内存模型
面试者:xxx
面试官:说说Java线程栈?
面试者:xxx
面试官:各种回收算法?
面试者:xxx
面试官:谈谈你在工作中怎么对JVM优化?
面试者:xxx
是不是比较耳熟?JVM在各种面试中被问了无数次,难道每次面试前都要准备这些东西?
面试造火箭,工作拧螺丝?
真实的JVM
那我们把整个jvm的过程连接起来吧!jvm的架构图如下
第一步:classloader加载class 文件,链接和初始化
第二步:运行时区分配heap,方法区和stack
第三步:执行引擎先解释,编译后调用本库地方法执行
思维导图解析核心的运行时数据区
线程是一个程序里的运行单元。JVM允许一个应用有多个线程并行的执行。在Hotspot JVM里,每个线程都与操作系统的本地线程直接映射。在一个Java线程准备好了所有的状态后,比如线程本地存储,缓存分配,同步的对象,栈以及程序计数器,这时一个操作系统中的本地线程也同时创建。当Java线程终止后,本地线程也会回收。操作系统因此负责所有线程的安排调度到任何一个可用的CPU上。一旦本地线程初始化成功,它就会调用Java线程中的run()方法。当run()方法返回,发生了未捕获异常,Java线程终止,本地线程就会决定是否JVM也应该被终止(是否是最后一个非守护线程) 。当线程终止后,本地线程和Java线程持有的资源都会被释放。
帧栈Frame用来存储数据和部分结果的数据结构,同时也用来处理动态链接,方法返回值和异常分配;
帧栈随着方法调用而创建,随着方法结束而销毁--无论方法时正常完成还是异常完成都算作方法结束。
首先heap区
heap在虚拟机启动时创建,供所有类实例和数组对象分配内存的区域。
然后stack区
栈与线程同时创建,用于存储栈帧Frame,用于存储局部变量与一些尚未算好的结果。
最后方法区
方法区在虚拟机启动的时候创建
大图,可以关注我,然后@我获取
参考资料
【1】https://dzone.com/articles/jvm-architecture-explained
【2】https://www.guru99.com/java-virtual-machine-jvm.html