(一)Java虚拟机相关问题详解

(一、二)垃圾回收机制。

   根据各个不同公司,JVM垃圾回收机制会不同。 我们大都用sun公司的实例,下面我们以sun公司的JVM为例 。

   (1.0)判断对象是否死亡算法。

             1.  可达性分析算法。垃圾回收线程(查找)---->"根集"【就是当前运行的线程中,可以访问的引用变量的集合】(eg:当前函数的参数和局部变量,当前类的成员变量等等)---->垃圾回收线程(查找"根集"的直接引用)--->组成的对象 结合(循环重复上述步骤)---->找到所有对象。

   ①根集遍历可达到--->有效对象。

   ②根集遍历不可达到--->失效对象(垃圾)。

      【扩充:①引用计数算法②可达性分析算法】

  (2.0)垃圾回收的算法。

           1. 分代收集算法。 分为①年老代【不常进行,CPU开销大】年轻代【经常进行,CPU开销小】

  【扩充:①标记-清楚算法。②复制算法③标记-整理算法④分代收集算法】

(三)类的加载过程。详情请关注---: 类的加载过程详解

          双亲委派模型是什么【JDK1.2之前没有】(转)?图示:

        首先,得知道一个概念:自定义加载器。(JVM规范 所有继承了抽象类java.lang.ClassLoader的类加载器:定义为自定义加载器

重写其findClass()方法:

 方法                                 说明
 
getParent()  返回该类加载器的父类加载器。

 loadClass(String name) 加载名称为 二进制名称为name 的类,返回的结果是 java.lang.Class 类的实例。

 findClass(String name) 查找名称为 name 的类,返回的结果是 java.lang.Class 类的实例。

 findLoadedClass(String name) 查找名称为 name 的已经被加载过的类,返回的结果是 java.lang.Class 类的实例。

 resolveClass(Class<?> c) 链接指定的 Java 类




    双亲委派过程:当一个类加载器收到类加载任务时,立即将任务委派给它的父类加载器去执行直至委派给最顶层的启动类加载器为止。如果父类加载器无法加载委派给它的类时,将类加载任务退回给它的下一级加载器去执行;
   除了启动类加载器以外,每个类加载器拥有一个父类加载器,用户的自定义类加载器的父类加载器是AppClassLoader
    双亲委派模型可以保证全限名指定的类,只被加载一次

    双亲委派模型不具有强制性约束,是Java设计者推荐的类加载器实现方式;

(四)有哪些类加载器

    1.0 启动类加载器(Bootstrap  ClassLoader):由C++语言实现,直接嵌在JVM内核上,JVM启动它就启动了。

         负责:加载JAVA_HOME\lib目录中并且能被虚拟机识别的类库到JVM内存中,如果名称不符合的类库即使放在lib目录中也不会被加载。该类加载器无法被Java程序直接引用。

     2.0 拓展类加载器(Extension ClassLoader)该加载器主要是负责加载JAVA_HOME\lib\,该加载器可以被开发者直接使用。

     3.0  应用程序类加载器(Application  ClassLoader)该类加载器也称为系统类加载器,它负责加载用户类路径(Classpath)上所指定的类库,开发者可以直接使用该类加载器,如果应用程序中没有自定义过自己的类加载器,一般情况下这个就是程序中默认的类加载器。

    【注意:】他们之间的关系:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值