• java基础---JVM:类文件结构和类加载机制


    6.2无关性
     
    ===?java虚拟机如何保证平台无关,语言无关?java虚拟机只能够运行java程序吗?
    因为java虚拟机只识别.class文件字节码。用不同语言编写的代码最后转存成.class文件就能够被java虚拟机识别和运行。
     
     
     
    ===?类加载器用来做什么呢?
    1.加载一个类
    2.确定一个类的唯一性
    两个类的Class文件相同,但是使用不同的类加载器加载的时候就是不同的类。
     
    ===类加载器是什么?是java类吗?有几个重要的类加载器,请给出类加载器的层次结构?
    类加载器也是类,所以本身也需要被加载器加载。所以有一个不是类的加载器
    bootstrap,在hotspot里面是由c/c++代码写的,被封装到了jvm内核中了,将/lib目录下的文件加载到虚拟机中进行使用,但是本身无法被java程序直接引用。
    extclassloader:用来加载/lib/ext目录下的类库
    appclassloader:用来加载用户类路径上Classpath指定的类库。
    bootstrap加载java运行时候需要的类。包括util包,concurrent包。
    ===类加载机制,双亲委派模型,为什么使用双亲委派模型进行加载?
    双亲委派模型要求除了顶层的启动类加载器外,其余的类加载器都要有自己的父类加载器。当类加载器收到了类加载的请求,不会尝试自己去加载这个类,而是把请求委派给父类加载器。每个层次的加载器都是这样,所以每个类加载请求都会传送到顶层启动加载器上,只有当父加载器反馈自己无法完成这个加载请求的时候,子加载器就会自己去尝试加载。
    为了保证安全,为了保证所有的基础类都是同一个类加载器加载的,避免系统混乱。因为如果不使用双亲委派机制,自己手写个类加载器就能加载基础类比如String类就会造成系统安全问题。
     
  • 相关阅读:
    mongodb安装错误以及原理
    animate.css使用
    JavaScript面向对象的方式开发轮播图插件
    数组/对象深拷贝
    JavaScript中数组的方法和字符串方法总结
    远程管理命令
    python+selenium 滑动滚动条的操作
    远程管理命令:
    文件和目录命令二:
    文件和目录命令一:
  • 原文地址:https://www.cnblogs.com/buptyuhanwen/p/9412136.html
Copyright © 2020-2023  润新知