专栏首页业余草一个 System.gc 就能让你在面试中被打击到怀疑人生

一个 System.gc 就能让你在面试中被打击到怀疑人生

人的一生中可能会遭遇到无数次打击。而今天我就给大家介绍一个你可能忽略的知识点:System.gc,给你专门来一次降维打击。降低到某个细微的知识点,让你被打击的体无完肤。

面试题一:在 Java 中,如何手动的让 GC 进行垃圾回收?

这个方法其实有很多种。常见骚操作有 System.gc(),通过 jmap 来触发,或者通过 jvmti 做强制 GC 等。

面试题二:System.gc 是 Full Gc 吗?

System.gc 其实是做一次 full gc。这一点可以根据 DisableExplicitGC 的注释说明来看。Tells whether calling System.gc() does a full GC。

面试题三:System.gc 的危害是什么?

因为 System.gc 是一个 Full gc,所以会暂停整个进程。如果进程经常被频繁暂停,就要注意超时、并发等问题。

面试题四:如何避免 System.gc ?

通过 -XX:+DisableExplicitGC 禁掉 System.gc。

面试题五:System.gc 的 Full Gc 如何做到暂停整个进程?

Java 里面的 GC 有一个重要的线程 VMThread。在 jvm 里,这个线程会不断轮询它的队列,这个队列里主要是存一些 VM_operation 的动作,比如最常见的就是内存分配失败要求做 GC 操作的请求等,在对 gc 这些操作执行的时候会先将其他业务线程都进入到安全点,也就是这些线程从此不再执行任何字节码指令,只有当出了安全点的时候才让他们继续执行原来的指令,因此这其实就是我们说的 stop the world(STW),整个进程相当于静止了。

面试题六:并行的 Full GC 是否有了解?

并行 Full GC 也同样会做 YGC 和 CMS GC,但是效率高就搞在 CMS GC 是走的 background 的,整个暂停的过程主要是 YGC、CMS_initMark、CMS_remark 几个阶段。background 顾名思义是在后台做的,也就是可以不影响正常的业务线程跑,触发条件比如说 old 的内存占比超过多少的时候就可能触发一次 background 式的 cms gc,这个过程会经历 CMS GC 的所有阶段,该暂停的暂停,该并行的并行,效率相对来说还比较高,毕竟有和业务线程并行的 gc 阶段;而 foreground 则不然,它发生的场景比如业务线程请求分配内存,但是内存不够了,于是可能触发一次 cms gc,这个过程就必须是要等内存分配到了线程才能继续往下面走的,因此整个过程必须是STW的,因此 CMS GC 整个过程都是暂停应用的,但是为了提高效率,它并不是每个阶段都会走的,只走其中一些阶段,这些省下来的阶段主要是并行阶段。

以上几个关于 System.gc 的问题,你是否被雷到了。其实 Java 的 Gc 还是很复杂的,我只是降低维度到了 System.gc 这个具体的方法,后面有时间了,我们在继续分享。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 触发JVM进行Full GC的情况及应对策略

    很多人都分不清 Major GC, Full GC 的概念,事实上我查了下资料,也没有查到非常精确的Major GC和Full GC的概念定义。分不清这两个概念...

    业余草
  • Java虚拟机:JVM内存分代策略

    Java虚拟机根据对象存活的周期不同,把堆内存划分为几块,一般分为新生代、老年代和永久代(对HotSpot虚拟机而言),这就是JVM的内存分代策略。

    业余草
  • web版pdf在线阅读器

    最近论坛里有人提到了,在线pdf阅读器怎么做。我百度了一下,发现很多人都很懒,程序员都很懒吗? 答案是否定的。为什么都不愿...

    业余草
  • HTML/CSS/JS 是如何在浏览器中,渲染成你看到的页面?【图解Chrome】

    Chrome 算是程序员的标配了,从全球的市场份额来看,它在全球市场的份额已经超过 60%。

    一墨编程学习
  • 推荐一些冷门但是超级实用的工具

    下载地址:https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip

    Java识堂
  • HTML JS DOM

      当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)。HTML DOM 模型被构造为对象的树。

    饮水思源为名
  • TI--安卓运行时权限完美封装

    张风捷特烈
  • powerdesigner的逆向工程

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    逝兮诚
  • 08DOM相关概念叙述

    DOM是个缩写,全称是 Document Object Model,被译为文档对象模型。

    Dreamy.TZK
  • 【干货】​在Python中构建可部署的ML分类器

    【导读】本文是机器学习爱好者 Sambit Mahapatra 撰写的一篇技术博文,利用Python设计一个二分类器,详细讨论了模型中的三个主要过程:处理不平衡...

    WZEARW

扫码关注云+社区

领取腾讯云代金券