初识JVM

java体系结构

方法区(Method Area),堆(heap),Java栈(java stack),本地方法栈(Native Method Stack),程序计数器(Program Counter Register)
​
方法区(Method Area),堆(heap) -->  GC的作用区域

ClassLoader(类加载机制)作用

Java 程序在运行的时候,JVM通过类加载机制(Class Loader)把class文件加载到内存中,只有class文件被载入内存,才能被其他class引用,使程序正常的运行起来。

ClassLoader的分类

Java中的ClassLoader有三种:Bootstrap ClassLoader 、Extension ClassLoader、App ClassLoader。
​
1. Bootstrap ClassLoader
由C++写的,由JVM启动.
启动类加载器,负责加载java基础类,对应的文件是%JRE_HOME/lib/ 目录下的rt.jar、resources.jar、charsets.jar和class等
​
2.Extension ClassLoader
Java类,继承自URLClassLoader 扩展类加载器,
对应的文件是 %JRE_HOME/lib/ext 目录下的jar和class等
​
3.App ClassLoader
Java类,继承自URLClassLoader 系统类加载器,
对应的文件是应用程序classpath目录下的所有jar和class等

ClassLoader的加载机制

Java的加载机制是双亲委派机制来加载类,
​
为什么要使用这种方式?这个是为了保证 如果加载的类是一个系统类,那么会优先由Bootstrap ClassLoader 、Extension ClassLoader先去加载,而不是使用我们自定义的ClassLoader去加载,保证系统的安全!
​
这三种类加载器存在父子关系,App ClassLoader的父类加载器是Extension ClassLoader,Extension ClassLoader的父类加载器是Bootstrap ClassLoader,要注意的一点是,这里的父子并不是继承关系.
​
当这三者中的某个ClassLoader要加载一个类时,会先委托它的父类加载器尝试加载,一直往上,如果最顶级的父类加载器没有找到该类,那么委托者则亲自到特定的地方加载

自定义ClassLoader

1、为什么要自定义ClassLoader
​
因为系统的ClassLoader只会加载指定目录下的class文件,如果你想加载自己的class文件,那么就可以自定义一个ClassLoader.
而且我们可以根据自己的需求,对class文件进行加密和解密。
​
2.如何自定义ClassLoader
2.1
新建一个类继承自java.lang.ClassLoader,重写它的findClass方法。
2.2
将class字节码数组转换为Class类的实例
2.3
调用loadClass方法即可
​
​

双亲委派机制的作用

1、防止重复加载同一个.class。通过委托去向上面问一问,加载过了,就不用再加载一遍。保证数据安全。 2、保证核心.class不能被篡改。通过委托方式,不会去篡改核心.class,即使篡改也不会去加载,即使加载也不会是同一个.class对象了。不同的加载器加载同一个.class也不是同一个Class对象。这样保证了Class执行安全。

 

常用GC算法

标记清除,标记压缩,复制;
​
复制算法的缺点:
1.不适用于存活率高的情况,因为需要将所有存活对象都复制一遍,并将所有引用地址重置一遍,浪费时间。
2、from和to同一时刻只能有一个在装了东西,另外一块内存区域一定为空
​
标记清除(Mark-Sweep)(用于老年代)没有拷贝,所以空间不浪费但是会扫描两次(标记一次、清除一次),耗时严重、内存空间不连续,有内存碎片,再想去找连续空间就不好找了
​
标记压缩(Mark-Compact)(标记清除+整理)(用于老年代)没有内存碎片、可以腾出连续空闲的内存空间唯一缺点:效率不高,移动对象需要耗费更多时间(是四个算法中耗时最长的)
​
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值