zoukankan      html  css  js  c++  java
  • Android ClassLoader笔记(一)

    一、Java ClassLoader

    ClassLoader:类加载器,主要是用来查找和加载Class文件到JVM。

    包括2种类型:系统和自定义。
    系统类加载器:Bootstrap CL(BCL),Extensions CL(ECL),App CL(ACL)

    BCL:c/c++实现,java代码不能访问到。加载系统类,如java.util.*。JVM启动是通过它创建一个初始类完成的。默认路径jre/lib,可以通过System.getProperty("sun.boot.class.path")获取路径。

    ECL:加载除系统外的额外功能,默认路径jre/lib/ext。

    ACL:加载当前应用程序Classpath目录下的所有jar和class文件。

    运行程序需要几种类型加载器:(1)ACL(2)ECL(3)BCL
    CL继承关系:当前应用加载器ACL-ACL的父加载器ECL-ECL的父加载器BCL。
    ACL和ECL继承于URLCL,URLCL继承于SecureCL,SCL继承于根类加载器CL。
    ACL和ECL都是Launcher的内部类,而Launcher是JVM的入口应用,他们都在Launcher中进行初始化的。

    双亲委托模式:CL find class采用这种模式。所谓双亲委托模式就是首先判断该Class是否已经加载,如果没有则委托父加载器查找,这样进行递归,直到委托到最顶层的BCL,如果BCL找到了该Class,就会直接返回,否则继续一次向下查找,如果没找到最后会交由自身去查找。
    总而言之,整个过程就是先从下到上委托,然后从上到下查找。

    好处:
    -避免重复加载
    -更安全。如果没有这种模式,就可以自定义一个类替代系统类了。有了这种模式,会使得系统类在JVM启动是被加载而且,只有类同名且被同一个类加载器加载,JVM才会认为是同一个类。所以想骗过JVM显然不会那么容易。

    参考:
    http://liuwangshu.cn/application/classloader/1-java-classloader-.html

  • 相关阅读:
    Linux脚本文件注释
    Linux三剑客之grep命令
    Linux获取本机IP
    Linux的cut命令详解
    Linux的wc命令详解
    Linux的uniq命令详解
    Linux的sort命令详解
    shell之a+b求和脚本的三种写法
    shell的文件比较运算符和字符串比较运算符
    shell中变量$系列的含义
  • 原文地址:https://www.cnblogs.com/hacjy/p/8136080.html
Copyright © 2011-2022 走看看