首页 > 编程语言 > 详细

Java--JVM--体系结构概论

时间:2021-06-05 18:03:41      阅读:10      评论:0      收藏:0      [点我收藏+]
  1. JVM的位置
    1. 技术分享图片
  2. JVM体系结构概览 

    1. 技术分享图片

  3. 类装载器ClassLoader

    1. 技术分享图片

       

    2. 技术分享图片

       

    3.  

       抽象类不能进行实例化,只能继承

    4. 加载器的种类
      1. 启动类加载器(Bootstrap)

      2. 扩展类加载器(Extension)

      3. 应用程序类加载器(AppClassLoader)

      4. 用户自定义的加载器

    5. 双亲委派机制(保证了沙箱安全)

      1. 我们写一个和java源代码一样的类(java.long.String)

      2. 运行这个类时,虚拟机会先在启动类加载器中找,有没有这个类,有就用这个类,没有在往下走在扩展类加载器中找有没有这个类,找到了就用就不会在往下走了

      3. 如果两个都没有找到这个类,才会进入到应用程序类加载器中找,先找到先使用,后面的一改不计较

      4. 保证了如果我们写了和java源码一样的类时,不会污染源码的类,保证java的源码是同一个  

      5. 技术分享图片

      6. 技术分享图片
    6.  

       

      类加载器的问题总结

      1. 什么是类加载器

        • 负责加载class文件,class文件在 文件开头有特定的文件标示,将class文件字节码内容加载到内存中,并将这些内容转换成方法区中的

        • 运行时数据结构并且ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定

      2. 有几种

        • 默认的有三种
          • 启动类加载器(Bootstrap)
          • 扩展类加载器(Extension)
          • 应用程序类加载器(AppClassLoader)  
        • 用户自定义的 
      3. 类加载器的优势
        1. 避免了类的重复加载
        2. 保护了程序的安全,避免了API被随意篡改   
      4. 什么 是双亲委派机制

        1. 当一个类加载器收到了类加载请求,他首先不会尝试自己去加载这个类,而是把这个
          请求委派给父类去完成,每一个层次类加载器都是如此,因此所有的加载请求
          都应该传送到启动类加载其中,只有当父类加载器反馈自己无法完成这个请求
          的时候(在它的加载路径下没有找到所需加载的Class),子类加载器才会尝试
          自己去加载。

        2. 采用双亲委派的一个好处是比如加载位于rt.jar包中的类java.lang.Object, 不管
          是哪个加载器加载这个类,最终都是委托给顶层的启动类加载器进行加载,这
          样就保证了使用不同的类加载器最终得到的都是同样--个Object对象。

            
      5. 沙箱安全

        1. 我们自定义的和java源码的类一样时,由于相亲委派机制的存在,会加载java自带的类,而造成类的重复加载,保证了对java源代码的保护,防止我们的代码污染源代码,实现了沙箱安全
        2. 将java代码限定在虚拟机运行范围内,严格限制代码对本地系统资源的访问,保证对代码的有效隔离,防止对本地系统造成破坏    

            

           

           

           

           

           

            

           

           

            

            

Java--JVM--体系结构概论

原文:https://www.cnblogs.com/zzhAylm/p/14852243.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!