JVM类加载器以及双亲委派模型

Posted suna-an

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVM类加载器以及双亲委派模型相关的知识,希望对你有一定的参考价值。

   JVM是什么?类加载器是什么?

  •    JVM是虚拟机(Java Virtual Machine),JVM是运行字节码的。JVM有针对不同系统的特定实现(WindowsLinuxmacOS),目的是使用相同的字节码,它们都会给出相同的结果。
  •  类加载器(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类加载器以及双亲委派模型的主要内容,如果未能解决你的问题,请参考以下文章

JVM类加载器以及双亲委派模型

JVM——类加载器的双亲委派模型

JVM 类加载器与双亲委派模型

JVM 类加载器与双亲委派模型

JVM:类加载器·双亲委派模型

Jvm(58),类加载器----双亲委派模型