java相关面试题以及答案集合(一)

一、垃圾回收算法有几种类型? 他们对应的优缺点又是什么?

1.Mark-Sweep(标记-清除)算法  

       优点:标记-清除算法实现起来比较容易

       缺点:但是有一个比较严重的问题就是容易产生内存碎片,碎片太多可能会导致后续过程中需要为大对象分配空间时无法找到足够的空间而提前触发新的一次垃圾收集动作。

2.Copying(复制)算法 

        优点:这种算法虽然实现简单,运行高效且不容易产生内存碎片。

        缺点:但是却对内存空间的使用做出了高昂的代价,因为能够使用的内存缩减到原来的一半。

3.Mark-Compact(标记-整理)算法 

       解决copying算法的缺点,在标记阶段和算法1一样,只不过在标记完成之后不会立马进行清理,会先将所有标记数据移向一端,然后清理端边界意外的数据。

4.Generational Collection(分代收集)算法

     它的核心思想是根据对象存活的生命周期将内存划分为若干个不同的区域。一般将栈区分为:

    老年代(Tenured Generation):每次垃圾收集时只有少量对象需要被回收

    新生代(Young Generation):每次垃圾回收时都有大量的对象需要被回收,然后根据不同代的特点采取最适合的收集算法

注意:在堆区之外还有一个代就是永久代(Permanet Generation),它用来存储class类、常量、方法描述等。对永久代的回收主要回收两部分内容:废弃常量和无用的类

二、类的加载过程是什么?简单描述一下每个步骤

   考察的是jvm相关,JVM类加载机制分为七个部分:加载,验证,准备,解析,初始化,使用,卸载。

1.加载:这个阶段会在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的入口。注意这里不一定非得要从一个Class文件获取,这里既可以从ZIP包中读取(比如从jar包和war包中读取),也可以在运行时计算生成(动态代理),也可以由其它文件生成(比如将JSP文件转换成对应的Class类)。

2.验证:这一阶段的主要目的是为了确保Class文件的字节流中包含的信息是否符合当前虚拟机的要求,并且不会危害虚拟机自身的安全。

3.准备:是正式为类变量分配内存并设置类变量的初始值阶段,即在方法区中分配这些变量所使用的内存空间。注意这里所说的初始值概念,eg:public static int v = 8080;

4.解析:是指虚拟机将常量池中的符号引用替换为直接引用的过程。符号引用就是class文件中的CONSTANT_Class_info、CONSTANT_Field_info、CONSTANT_Method_info等

5.初始化:是类加载最后一个阶段,前面的类加载阶段之后,除了在加载阶段可以自定义类加载器以外,其它操作都由JVM主导。到了初始阶段,才开始真正执行类中定义的Java程序代码

6.使用:当 JVM 完成初始化阶段之后,JVM 便开始从入口方法开始执行用户的程序代码

7.卸载:当用户程序代码执行完毕后,JVM 便开始销毁创建的 Class 对象,最后负责运行的 JVM 也退出内存

三、JVM 预定义的类加载器有哪几种?分别什么作用?

1. %JAVA_HOME% : 为JDK设置的环境变量路径. 如环境变量里设置了%java_home%=C:\jdk1.8.0

2. Bootstrap Classloader  :  启动类加载器,用来加载 %JAVA_HOME%/jre/lib 下的, 如 rt.jar中的class文件 或者 xbootclasspath选项指定的jar包

 3. Extension Classloader :扩展类加载器 , 用来加载 %JAVA_HOME%/jre/ext 中的class文件 或者 -Djava.ext.dirs指定目录下的jar包

4. Application Classloader  : 应用类加载器 , 用来加载classpath下的class文件

5. Custom  Classloader : 用户自定义类加载器,用来加载自定义内容.此加载器需要用户自己继承Classloader类

作用:可以防止核心API库被随意篡改

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值