• Java笔记(一)GC及类加载


    垃圾回收器(GC)
        垃圾回收器:java中有一个线程,专门负责JVM中垃圾内存的释放
        垃圾:没有引用的内存节点
        垃圾回收的算法
        注意:垃圾回收有自己的算法,我们是不能控制垃圾回收机制的,虽
        然有和垃圾回收相关的方法:java.lang.System.gc()  java.lang.Runtime.gc(),但是还是无法控制垃圾回收机制,只能通过这两种方法通知GC回收。
        算法有(知道算法名字即可,不需要下去研究具体实现):标记-清除,复制,标记-整理,分代收集

    Java程序执行的整个流程
        Hello.java- -编译 ->Hello.class- ClassLoader装载- ->JVM- ->字节码验证
        - ->对字节码逐行解析- ->执行
        - ->JIT(即时编译) - ->执行

    JVM装载.class 文件到内存的过程剖析(双亲委托机制)

        启动级类加载器(Bootstrp ClassLoader)用C++语言写的,它是在Java虚拟机启动后初始化,
        它主要负责加载%JAVA_HOME%/jre/lib,
        -Xbootclasspath参数指定的路径
        以及%JAVA_HOME%/jre/classes中的类

        扩展级类加载器(Extension ClassLoader)用java语言写的,它负责将
        %JAVA_HOME%/jre/lib/ext或者由系统变量 java.ext.dir指定位置中的类
        库加载到内存中。开发者可以直接使用标准扩展类加载器。

        本地类加载器(Applicaiton ClassLoader)用java语言写的,用于加载我
        们自己定义编写的类,它负责将系统类路径(CLASSPATH)中指定的类库加载到
        内存中。开发者可以直接使用系统类加载器。由于这个类加载器是ClassLoader
        中的getSystemClassLoader()方法的返回值,因此一般称为系统
        (System)加载器
     
     双亲委托机制加载类的过程
         当本地类加载器加载一个class时,它首先不会自己去尝试加载这个类,
         而是把类加载请求委派给父类加载器扩展级类加载器去完成。
        
         当扩展级类加载器加载一个class时,它首先也不会自己去
         尝试加载这个类,而是把类加载请求委派给BootStrapClassLoader去完成。
        
         如果启动级类加载器加载失败,会使用扩展级类加载器来尝试加载;
         若扩展级类加载器也加载失败,则会使用本地(系统级)类加载器来加载,
         如果本地(系统级)类加载器也加载失败,则会报出异常ClassNotFoundException。


     字节码验证过程
         代码要符合JVM的规范
         代码不能破坏计算机的系统或者硬件
         栈不能溢出
         方法的参数类型要正确
         类型转换要正确

     JIT(即时编译):通过代码的运行,基于2080规则基于算法找出里面重复率比较高的代码存储起来,下次调用的时候不需要在编译,直接执行。

  • 相关阅读:
    Java第一次作业
    第十一次
    第十次
    第九次
    第八次作业
    第七次
    第六次
    第五次作业
    ##JAVA作业3
    ##Java作业2
  • 原文地址:https://www.cnblogs.com/heavenplus/p/9379949.html
Copyright © 2020-2023  润新知