JVM---类加载器,自定义类加载器

JVM---自定义类加载器

1.    为什么需要自定义类加载器

应用场景介绍:加密防止被反编译,不用JAVA的类加载器。非标准的来源加载代码:字节码放在数据库,云端,自定义类加载器,指定来源的加载器。

2.    双亲委派模型:

当前类加载器已经加载的类中查询是否此类已经被加载,如果没有找到就去委托父类加载器去加载,启动类加载器加载失败,就使用拓展类加载器尝试加载。

好处:避免用户自己编写类替换核心类,避免了类的重复加载

3.    自定义类加载器

继承ClassLoader 实现findClass方法。

Java类加载器机制总结

1.    类加载器的组织结构,类加载器具有层次结构,即父子关系

2.    分类:

启动类,加载虚拟机的核心类库。Bootstrapclass loader.

       标准扩展类加载器,加载除了基本API之外的一些拓展类。Extensionclass loader.

       自定义类加载器,加载应用程序和程序员自定义类。AppClassLoader.

3.    类的加载机制,类被加载到虚拟机内存包括加载,链接,初始化,链接又细分为验证,准备,解析。

    3.1 加载可以使用系统提供的类加载器完成,也可以由用户自定义的类加载器完成,开发人员可以通过类加载器控制字节流。

    3.2 链接阶段,验证,准备,解析。对于类变量,类方法指的是方法区的指针,然后对于实例化方法 ,实例对象来说就是偏移量。

    3.3 初始化,使用new关键字实例化对象,访问一个类的静态字段,静态方法。对类进行反射调用的时候,对初始化子类,如父类还没有进行过初始化,则进行父类的初始化。

4.    类加载的三种方式

由new关键字创建的一个类实例,调用Class.forName()方法,通过反射加载类,调用某个ClassLoader实例的loadclass()方法。


猜你喜欢

转载自blog.csdn.net/mr_ming_/article/details/79694832