• JVM底层实现与总结


    一、类加载器

      1.BootstrapClassLoader(启动类加载器)

       它主要负责加载%JAVA_HOME%/jre/lib,-Xbootclasspath参数指定的路径以及%JAVA_HOME%/jre/classes中的类。

       2.ExtensionClassLoader  (扩展类加载器)

       ExtClassLoader主要加载%JAVA_HOME%/jre/lib/ext,此路径下的所有classes目录以及java.ext.dirs系统变量指定的路径中类库。

       3.AppClassLoader 

       AppClassLoader主要负责加载classpath所指定的位置的类或者是jar文档,它也是Java程序默认的类加载器。

      他们之间为父子类关系,双亲委托机制是父及子去递归调用加载器,沙箱安全机制使用户无法替换JDK本身的类。

      此外可以用户自定义加载类,定义自已的类加载器分为两步:1、继承java.lang.ClassLoader2、重写父类的findClass方法。

           classloader的作用是将字节码文件读取到内存,是JVM的入口

    二、执行引擎(Execution Engine)

      执行引擎的作用是解释命令,提交给操作系统执行

    三、本地方法栈(线程私有)

      通过执行native方法,通过本地方法接口调用本地方法库

    四、程序计数器(线程私有)

      可看做是指针,指向方法区的字节码(即下条指令的地址),内存很小

    五、虚拟机栈(线程私有)

      生命周期与线程一致。8种基本类型变量,对象的引用变量,实例方法都是在函数的栈内存分配,主要保存三种数据:

        1.本地变量:输入输出参数、方法内变量

        2.栈操作 :出栈、入栈等操作

        3.栈帧数据:类文件、方法等

    六、方法区(线程共享)

      用于储存静态变量、常量、类信息(构造函数/接口定义)、运行时常量池。

       虽然Java 虚拟机规范把方法区描述为堆的一个逻辑部分,但是它却有一个别名叫做Non-Heap(非堆),目的应该是与Java 堆区分开来。

    七、堆(线程共享)

      一个JVM对应着一个堆,用于存放对象实例。可以通过参数-Xms-Xmx来控制。默认1/64和1/4。用来储存实例对象。

      

      

  • 相关阅读:
    第三次迭代目标
    UML用例图以及时序图
    第一次迭代目标完成情况及感想
    第四次迭代感想
    数据流图与数据流程图的区别
    第三次迭代感想
    速达的用例图与时序图
    第一次迭代的感想
    速达的WBS
    NABCD的分解
  • 原文地址:https://www.cnblogs.com/Noctis/p/10920305.html
Copyright © 2020-2023  润新知