P13、JVM架构图
灰色的说明:
1、线程私有
2、内存占用非常少,不存在GC垃圾回收
亮色的说明:
1、所有线程共有,存在GC垃圾回收
2、方法区垃圾回收比较少,大多数是回收堆。
P14-P15、 类装载器
C是面向过程的,C++是面向对象的,支持多重继承,可以基于指针操作,需要手动释放内存解答完毕
(c++)-- =java
双亲委派
当一个类收到了类加载请求,他首先不会尝试自己去加载这个类,而是把这个请求委派给父类去完成,每一个层次类加载器都是如此,因此所有的加载请求都应该传送到启动类加载其中,只有当父类加载器反馈自己无法完成这个请求的时候(在它的加载路径下没有找到所需加载的Class),子类加载器才会尝试自己去加载。
采用双亲委派的–个好处是比如加载位于rt.jar包中的类java.lang.Object,不管是哪个加载器加载这个类,最终都是委托给顶层的启动类加载器进行加载,这样就保证了使用不同的类加载器最终得到的都是同样–个Object对象。
P16、本地接口
package jvm13;
/**
* @author: lnn
* @date: 2021/6/27 10:11
*/
public class T1 {
public static void main(String[] args) {
Thread t1=new Thread();
t1.start();
t1.start();
}
}
P17、PC寄存器
P18、小总结
主题: JVM
1 JVM系统架构图
2类加载器
System.out.println(myObject.getClass().getClassLoader().getParent().getParent());//null,Java看不到c++写的启动器
System.out.println(myObject.getClass().getClassLoader().getParent());//sun.misc.Launcher$ExtClassLoader@1540e19d
System.out.println(myObject.getClass().getClassLoader());//sun.misc.Launcher$AppClassLoader@18b4aac2
2.1有哪几种类加载器
2.2双亲委派
2.3沙箱安全机制
3 Native
3.1 native是一个关键字
3.2声明有,实现无,why?
4 PC寄存器
4.1记录了方法之间的调用和执行情况,类似排版值日表用来存储指向下一条指令的地址,也即将要执行的指令代码 它是当前线程所执行的字节码的行号指示器
P19、方法区
静态方法和成员方法的结构都是放在方法区