zoukankan      html  css  js  c++  java
  • JVM类加载机制

        User  java.lang.Class 所有的类都是Class类的对象
        类加载:由.java源文件编译生成.class二进制字节码文件,当运行时,首先Java虚拟机会将本地/网络阐传输.class文件加载到内存当中,那么加载的过程就叫做类加载
        

        一.类加载的过程
            加载过程:将.class文件通过IO流的方式加载到内存当中
                1.将.class文件字节码内容加载到内存当中
                2.先会将静态数据转换成方法区中的运行的数据结构
                3.在堆内存当中生成一个代表这个类的Class对象,这个Class类的对象就是作为方法区数据访问的入口     Class.forName(com.wdksoft.User);
            链接过程:
                1.验证阶段:验证字节码文件的准确性,包含文件格式,元数据,符号引用,字节码等等
                2.准备阶段:给类中的静态变量分配内存,并赋予初始值                                            
                3.解析阶段:将虚拟机常量池的符号引用替换成字节引用的过程
            初始化过程:初始化过程就会对类中的静态变量初始化为指定的值,执行静态代码块,执行构造器
            
            使用过程
            
            卸载过程
        


        
        二.类加载器的种类
            1.引导类加载器:负责加载JRE核心类库,jre包下rt.jar,charsets.jar等,C++语言编写,无法直接访问
            2.扩展类加载器ExtClassLoader:负责加载JRE扩展目录ext中的jar包
            3.系统类加载器AppClassLoader:负责加载classPath路径下的类包
            4.自定义类记载器:负责加载用户自定义下的类包     
                实现自定义类加载器:extends ClassLoader,重写loadClass方法进行类的加载
                


                    
            
        
        
        三.类加载机制
            1.全盘负责委托机制
                当进行类加载的时候,如果手动指定了ClassLoader,那么该类所依赖和引用的类也由这个类加载器进行加载
                User->UserParent
                指定User使用特定的类加载器,那么跟User类有依赖和引用关系的类也用这个类加载器进行加载
            
            2.双亲委派机制
                指先委托父类加载器寻找目标类,如果父类加载器无法进行类的加载则子类加载器自身处理
                
                1.沙箱安全机制:自定义的String.class不会被加载,这样可以防止核心API库被随意篡改
                2.避免类重复加载:当附加在其加载了该类是,就没有必要子类加载器也进行加载
            
            3.如何破坏双亲委派机制
                为什么要破坏双亲委派机制:父加载器需要委托子加载器进行加载
                
                如何破坏:
                    
                    1.重写ClassLoad类中的loadClass方法,指定加载哪一个类
                    2.手动调用系统类加载器
                        Thread.currentThread().getContextClassLoader();
                    3.重写findClass
                    
                    
            
        
        四.监控类加载过程
            在当前启动类当中加入-verbose:class参数,启动则可以看到整个类加载的过程


        

  • 相关阅读:
    raid阵列算法/数据恢复方法汇总
    EMC Isilon(OneFS)误删文件数据恢复过程<存储数据恢复>
    Raid磁盘阵列更换磁盘时另一块盘离线(v7000存储数据恢复)
    SqlServer数据库无法读取的数据恢复方案实施过程
    ds4800服务器lvm信息丢失数据恢复方案
    Hyper-V数据文件丢失数据恢复过程
    v7000存储数据恢复成功率分析-数据恢复初检报告
    Ext4文件系统fsck后损坏如何恢复?-北亚数据恢复
    服务器raid5两块硬盘离线lvm vxfs文件系统数据恢复过程
    临时表
  • 原文地址:https://www.cnblogs.com/chx9832/p/12468639.html
Copyright © 2011-2022 走看看