标签:linux 加载类 exec 程序 frame 小知识 用户 组成 strong
JVM是什么?类加载器是什么?
JVM有两种类加载器,分别是启动类加载器,其他类加载器,也可以理解为是用户自定义加载器。
小知识:1.JVM内存区域划分有什么?
--粗略地来分,JVM的内部体系主要由三部分组成,分别是类装载器(ClassLoader)子系统、运行时数据区、执行引擎(Execution engine)。
2.执行引擎?
--执行引擎或者在执行字节码,或者在执行本地方法。【执行引擎必须把字节码转换成可以直接被JVM执行的语言】
执行引擎主要是做解释、即时编译、自适应优化。
解释是通过解释器[芯片级直接执行其中解释是属于第一代JVM],
---执行方式:一条一条地读取,解释并且执行字节码指令,很快能解释完,速度慢。
即时编译是通过即时(Just-In-Time)编译器[属于第二代JVM],
--执行方式:是弥补解释器速度慢的缺点,按照解释执行的方式来执行,然后在合适的时候,把整段字节码编译成本地代码。直接通过本地代码去执行比一条条执行快的多。本地代 码执行快的原因是本地代码保存在缓存里。
自适应优化(目前Sun的HotpotJVM采用这种技术),是前面两代的结合方式。
--执行方式:开始对所有的代码都采取解释执行的方式,并监视代码执行情况,然后对经常调用的方法启东一个后台线程,将其编译为本地代码,并进行仔细优化。
3.运行时数据区主要包括什么?
--主要包括:方法区、堆、JVM栈(虚拟机栈)、PC寄存器、本地方法栈。
方法区:当JVM的类加载器加载.class文件,饼进行解析,把解析的类型信息放入方法区。
堆:存放所有程序在运行时创建的对象
JVM栈:是线程私有的,每个线程创建的同时都会创建JVM栈,JVM栈中存放的为当前线程中局部基本类型的变量(JAVA八种基本类型)、部分的返回结果以及Stack Frame,非基本类型的对象在JVM栈上仅存放一个指向堆上的地址。
本地方法栈:存储本地方法调用的状态
方法区&堆 是由所有线程共享
Java栈和PC寄存器 是由线程独享
本地栈 是存储本地方法调用的状态
20191105 继续更 !!!
参考:https://blog.csdn.net/qq_41701956/article/details/80020103
https://blog.csdn.net/m0_38075425/article/details/81627349
https://blog.csdn.net/javazejian/article/details/73413292#%E7%B1%BB%E4%B8%8E%E7%B1%BB%E5%8A%A0%E8%BD%BD%E5%99%A8-1
https://blog.csdn.net/xiaoliuliu2050/article/details/53023752
标签:linux 加载类 exec 程序 frame 小知识 用户 组成 strong
原文地址:https://www.cnblogs.com/Suna-An/p/11793773.html