zoukankan      html  css  js  c++  java
  • 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。用来储存实例对象。

      

      

  • 相关阅读:
    版本控制之GitHub亲手实验总结
    Java的HashMap是如何实现的?
    Junit
    由swap引发的关于按值传递和引用传递的思考与总结
    C++了解free和delete
    GitHub使用教程
    Oracle下SQL学习笔记
    Flappy Bird
    尾递归与Continuation(转载)
    十步完全理解SQL(转载)
  • 原文地址:https://www.cnblogs.com/Noctis/p/10920305.html
Copyright © 2011-2022 走看看