三:JVM(重点)

Posted bookmiki

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三:JVM(重点)相关的知识,希望对你有一定的参考价值。

技术图片

 

 

1.类加载器(将字节码文加加载到方法区  这里有一个验证的过程,错误的class将会被jvm吐出)重点

  1.1 虚拟机加载器

    启动类加载器:Bootstrap   通过getClassLoder获得的是Null。例如object类和String类的类加载器就是null因为权限不够

    扩展类加载器:extension   javax开头的包就是扩展的加载器的包

    应用程序类加载器:Appclassloder 自己写的类的加载器。java也叫系统类加载器,加载当前应用的classpath的所有类

  1.2 用户自定义加载器

    Java.lang.classloader的子类用户可以定制类的加载方式。

  1.3 沙箱安全机制:

    1.先去启动类里面找,找的到就用,找不到就去扩展类加载器中去用,如果还是找不到就去应用程序类加载器中去用:例如下面会包错找不到main方法

    技术图片

 

   1.4双亲委派机制:

      当一个类收到了类加载请求,他首先不会尝试自己去加载这个类,而是把这个请求委派给父类去完成,每一一个层次类加载器都是如此,因此所有的加载请求都应该传送到启动类加载其中,只有当父类加载器反馈自己无法完成这个请求的时候(在它的加载路径下没有找到所需加载的Class),子类加载器才会尝试自己去加载。
      采用双亲委派的一一个好处是比如加载位于rt,jar包中的类java.lang.Object, 不管是哪个加载器加载这个类,最终都是委托给顶层的启动类加载器进行加载,这 样就保证了使用不同的类加载器最终得到的都是同样一个 Object对象。

 

2.执行引擎执行

3.本地接口(重点)native只有声明没有实现 因为实现不在JAVA中而在第三方(底层)

  本地方法接口native interface:用native标注的方法就已经超出了JAVA的管辖范围就要等待C或者底层第三方函数库去实现

       本地方法加载到本地方法栈中

4.PC寄存器:程序计数器(就相当于程序运行顺序表每个各自存着下一条代码的内存地址。)

  记录了方法之间的调用和执行情况,类似排班值日表,用来存储指向下一条指令的地址,也即将要执行的指令代码,他是当前线程所执行的字节码的行号指示器

 

5.方法区:

  5.1 他存储了每一个类的结构信息(模板)

  5.2 方法区是规范,在不同的虚拟机里头实现是不一样的。最典型的就是永久代(PermGen Space)和元空间(Metaspace)个人猜测:Static就应该是在方法区中的吧

 


以上是关于三:JVM(重点)的主要内容,如果未能解决你的问题,请参考以下文章

jvm内存区域重点概要

重点知识学习(4.1)--[JVM概述,类加载机制]

关于java重点知识点

[JVM系列]别再说不知道volatile了

[JVM系列]别再说不知道volatile了

超详解 JVM 中重点内容,对整个底层体系更进认知