zoukankan      html  css  js  c++  java
  • Java面试连环炮问题收集记录贴【JVM方面】

    写这类文章是为了记录下网上看到的/自己经历的一些一环扣一环的面试问题,一方面提高自己的理论知识,另外一方面也给自己去参加面试或面试他人提供点参考和帮助。

    问题一:

    为什么一个对象会被GC?

    对象在进行可达性分析后发现没有与GC Roots相连接的引用链,那它将会被第一次标记并且进行一次筛选,筛选的条件是此对象是否有要执行finalize()方法。有必要执行finalize()方法的话,会把对象放置在一个叫做F-Queue的队列中,GC会对队列中的对象进行第二次小规模的标记,如果对象没有重新与引用链上的任何一个对象建立关联,则就被真正回收。

    说白了就是一个对象不存在任何引用,然后就会被回收。

    触发一个对象的回收:

    1.对象没有引用

    2.作用域发生捕获异常

    3.程序在作用域正常执行完毕

    4.程序执行了System.exit()

    5.程序发生意外终止

      

    问题二:为何会在这个时候发生GC?

    1.新对象生成,在Eden申请空间失败。2.老年代被写满、持久代被写满(已经移除)、System.gc()被显示调用、上一次GC之后Heap的各域分配策略动态变化

    问题三:GC都有哪些策略的分类?

    这边应该是对于每个垃圾回收器的说明了。

    新生代收集器:

    1.Serial收集器

        单线程执行GC 会引起"Stop The World" 虚拟机运行在Client模式下的默认新生代收集器 简单而高效(与其它收集器单线程比) 适用于用户桌面应用 采用复制算法

      2.ParNew收集器

        多线程执行GC 会引起"Stop The World" 虚拟机运行在Server模式下新生代收集器首选 因为需要配合老年代的CMS收集器工作 采用复制算法

      3.Parallel Scavenger收集器(吞吐量优先收集器)

        关注点达到一个可控制的吞吐量(CPU用于运行用户代码的时间与CPU总消耗时间的比值) 适用于后台计算而不需要太多交互的任务 GC自适应调节策略(-XX:+UseAdaptiveSizePolicy) 采用复制算法

      老年代收集器 

      4.Serial Old收集器

        单线程 适用于Client模式下 采用标记-整理算法

      5.Parallel Old收集器

        Parallel Scavenger的老年代版本 多线程 采用标记-整理算法 配合Parallel Scaverger 吞吐量优先的收集器才名副其实

      6.CMS收集器

        关注点尽可能地缩短垃圾收集器用户线程的停顿时间 采用标记-清除算法

        

        过程看JVM书中的图比较清晰。

        缺点:

          对CPU资源非常敏感 CPU比较多的时候效果比较好(回收线程:(CPU数量+3)/4)

          无法处理浮动垃圾 容易失败产生Concurrent Mode Failure,然后需要Serial Old收集器重新进行垃圾收集。

          会产生大量空间碎片

      7.G1收集器

      基于标记-整理算法 精确控制停顿 将Java堆(包括新生代、老年代)划分多个大小固定的独立区域(Region),跟踪这些区域的垃圾堆积情况,在后台维护一个优先列表,每次根据允许的收集时间,优先回收垃圾      最多的区域

    问题三:这些策略都有什么优劣势,适用于哪些场景?

       这个问题也基本上都在上面了。

      垃圾回收的博文:https://my.oschina.net/u/2380961/blog/750189

      JVM的垃圾回收在幕后辛苦劳作,让我们"摆脱了"内存管理的负荷。听说Python就没有提供这么多的选择,等我都熟悉了得去比较下两者。

      《深入理解Java虚拟机》值得一看,上面的内容都是基于书上第三章的。爱Java,爱生活!

  • 相关阅读:
    The Mac Application Environment 不及格的程序员
    Xcode Plugin: Change Code In Running App Without Restart 不及格的程序员
    The property delegate of CALayer cause Crash. 不及格的程序员
    nil localizedTitle in SKProduct 不及格的程序员
    InApp Purchase 不及格的程序员
    Safari Web Content Guide 不及格的程序员
    在Mac OS X Lion 安装 XCode 3.2 不及格的程序员
    illustrate ARC with graphs 不及格的程序员
    Viewing iPhoneOptimized PNGs 不及格的程序员
    What is the dSYM? 不及格的程序员
  • 原文地址:https://www.cnblogs.com/tiecheng/p/6038504.html
Copyright © 2011-2022 走看看