JVM类加载器以及双亲委派模型
Posted suna-an
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVM类加载器以及双亲委派模型相关的知识,希望对你有一定的参考价值。
JVM是什么?类加载器是什么?
- JVM是虚拟机(Java Virtual Machine),JVM是运行字节码的。JVM有针对不同系统的特定实现(Windows、Linux、macOS),目的是使用相同的字节码,它们都会给出相同的结果。
- 类加载器(ClassLoader)是Java运行时环境(Java Runtime Environment)的一部分,负责动态加载程序中的类型(类、接口)到JVM的内存空间去,并赋予唯一的名字。每一个JVM都有一个执行引擎(Execution engine)负责执行被加载类中包含的指令。
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
以上是关于JVM类加载器以及双亲委派模型的主要内容,如果未能解决你的问题,请参考以下文章