JVM原理

JVM原理_第1张图片

类加载器和双亲委派机制

类加载器:加载Class文件(1.虚拟机自带加载器 2.启动类加载器 3.扩展类加载器 4.应用程序加载器)

1.类加载收到类加载请求。

2.将这个请求向上委托给父类加载器去完成,一直向上委托,直到启动类加载器。

3.启动加载器检查是否能够加载当前类,能加在就结束,使用当前的加载器,否则抛出异常,让子类加载器进行加载。

4.重复步骤3。

双亲委派机制:当一个类需要加载的时候,最先尝试加载的就是启动类加载器,使用其他类并没有机会先加载,从一定程度上防止了危险代码的植入。

native:凡是带了native关键词,说明java的作用范围达不到了,回去调用底层C语言的库。java调用非java代码的接口。(进入本地方法栈,调用本地方法本地接口 JNI(java native inteface),融合了不同的编程语言为Java所用)

本地方法栈:存放本地native方法。

方法区:被所有线程共享的,存放构造函数,接口代码等。简单地说,所有定义的方法都保存在该区域,此区域属于共享区间。静态变量(static,final),类型(class),运行时的常量池存放在方法区。

沙箱安全机制:将Java代码限定在虚拟机特定的运行范围中,并严格限制代码对本地系统资源的访问,通过这样的措施保证对代码的有效隔离,防止对本地系统的破坏。

垃圾回收机制:主要在伊甸园区和养老区。

堆:存放对象。一个JVM只有一个堆内存,堆内存大小可以调节。新生区,养老区和永久区。

永久区用于存放JDK自身携带的class对象,存储的是JAva运行时的一些环境和类信息。这个区域不存在垃圾回收。(逻辑上存在,物理上不存在,方法区存在元空间中)

JDK8以后,永久存储区改了一个名字(元空间)。

栈:后进先出,主管程序的运行,生命周期和线程同步,不存在垃圾回收机制。八大基本类型,对象的引用+实例的方法。

GC的算法:标记清除法,标记压缩,复制算法,引用计数器。

JMM(Java Memory Model):缓存一致性协议,用于储存数据读写的规则。

JMM定义了线程工作内存和主内存之间的抽象关系:线程之间的共享变量储存在主内存中,每个线程都有一个私有的本地内存。volatile关键字。

理解栈+堆+方法区之间的关系。

画出一个对象实例化在内存中的过程。

对象中的常量和main方法中的常量存放在哪,string和int常量的区别。

你可能感兴趣的:(jvm,java,开发语言)