Zeus_龙的博客

哎呀,原创小博+各位博友总结。喜欢点赞,不喜望指出,一起交流学习,共同进步。day day up...

(一)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)上所指定的类库,开发者可以直接使用该类加载器,如果应用程序中没有自定义过自己的类加载器,一般情况下这个就是程序中默认的类加载器。

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

 

阅读更多
文章标签: JVM面试总结
个人分类: 面试题总结
想对作者说点什么? 我来说一句

Java 虚拟机原理教程

2010年08月07日 46KB 下载

没有更多推荐了,返回首页

不良信息举报

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

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭