一、jvm架构图
注意:
- java源文件通过javac编译成java字节码文件.class
- .class文件打开,他的开头是cafe babe,所以虚拟机才能识别
- 通过类加载器ClassLoader加载.class文件,将class文件放入内存中各个区域
- 程序计数器、JAVA栈、本地方法栈是线程独有的,不受GC管理
- 堆、方法区受GC管理
- 方法区里面并不是方法,而是类的模版。
- java8 方法区又称为非堆区,在内存结构中称为“元数据”。
- 灰色部分,是线程私有的,占用内存非常少,几乎不存在GC垃圾回收。
二、类装载器
问:什么是类加载器?
- 类加载器是用来加载类的
- 类加载器也是一个类:ClassLoader
- 类加载器可以被加载到内存,也是通过类加载器完成的
问:类加载器有哪几种?
- 系统自带的有三种:
- 根加载器-启动类加载器(BootStrap) C++写的
- 扩展类加载器(Extension) Java写的
- 应用程序类加载器(AppClassLoader)Java也叫系统类加载器,加载当前应用的classpath的所有类。
- 用户自定义加载器:
- Java.lang.ClassLoader的子类,用户可以定制类的加载方式。
问:什么叫双亲委派机制?
- 浅显理解:我爸是李刚,有事儿找我爹,要用到某个类,先去根加载器中找,找的到就用,如果找不到,再去扩展类加载器中找,还是没有,就去应用程序类加载器中找。
问:沙箱安全机制是什么?
- 沙箱安全机制是由基于双亲委派机制上 采取的一种JVM的自我保护机制,假设你要写一个java.lang.String 的类,由于双亲委派机制的原理,此请求会先交给Bootstrap试图进行加载,但是Bootstrap在加载类时首先通过包和类名查找rt.jar中有没有该类,有则优先加载rt.jar包中的类,因此就保证了java的运行机制不会被破坏.
问:为什么有沙箱安全机制?
- 防止恶性代码污染源代码