1.JVM是什么
JVM(Java Virtual Machine)
JVM本质上来说就是一个软件,可以让JAVA编译器所产生的class文件在其上面运行的虚拟机,正因为如此,JAVA才有了这么强大的可移植性。但是一般我们学习JVM的原因都是因为调优的问题。
2.JVM的结构
首先在完成java文件之后会经过javac命令生成对应的字节码文件
,再由类加载器加载到JVM中去执行。JVM本质上分为五大块:堆、方法区、JAVA栈、本地方法栈、程序计数器。外带一些本地的接口,可以用其他语言去写入。栈中存的都是对象的名字和引用,真正的数据都是在堆中,所以优化应该是在堆中,储存独享的过程可以这么形容,栈是这本书的目录,可以通过站的引用去找到相应堆中的对象
3.类加载器
类加载器是用来加载class文件到JVM中的。
class相当于表示这个对象的来源是哪里,所以一个类所产生的的不同的对象的class都是一样的,在类加载器加载初始化之后,每一个对象都是被这个class文件实例化出来的
4.双亲委派机制
其实双亲委派机制是一种JAVA保护的一种方式,在加载类的时候,会一层一层的向上委托,APP(应用)–>EXC(扩展)–>BOOT(根),到达最高层时,先看看最高层有没有这个类,如果有就加载,如果没有就继续往下,直到最底层,要是还是找不到就会报出一个Class Not Found的异常。
Bootstrap classLoader:主要以一些JAVA比较重要的一些类(例如java.lang)
ExtClassLoader:以加载jre中的一些扩展的jar(JDK1.8\jre\lib\ext)
AppClassLoader:又叫System Classloader,用来加载指定目录的jar包
(自己的理解,不够深刻,主要看其中的思想)