java面试官最爱问的垃圾回收机制,南京java开发招聘

数据库面试题 数据库面试题     2022-12-05     451

关键词:

什么是 Arthas?

Arthas 是一款开源在线诊断工具,采用命令行交互模式,支持 web 端在线诊断,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。这是一款开源一年多 GitHub star 2 万,99% 的阿里研发小哥都在用的 Java 终极诊断利器!相对比直接下载使用,我推荐开发者可以试一下通过 IDE插件 Cloud Toolkit 中使用Arthas 来实现一键远程诊断功能。

得益于 Arthas 强大且丰富的功能,让 Arthas 能做的事情超乎想象。下面仅仅列举几项常见的使用情况,更多的使用场景可以在熟悉了 Arthas 之后自行探索。

  • 是否有一个全局视角来查看系统的运行状况?
  • 为什么 CPU 又升高了,到底是哪里占用了 CPU ?
  • 运行的多线程有死锁吗?有阻塞吗?
  • 程序运行耗时很长,是哪里耗时比较长呢?如何监测呢?
  • 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
  • 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
  • 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
  • 有什么办法可以监控到 JVM 的实时运行状态?

Arthas 的命令、功能在其官方文档有详细介绍,下文将介绍一下近期几个使用场景。

场景 1:定位压测时的性能瓶颈

平时服务器请求都很正常。压测时,依赖的服务、数据库也都没有到达瓶颈,但是机器的 CPU 全部飘红,why?

通过 jstack 命令,只能看到某一时刻的堆栈,没有抓到真凶。

thread 查看当前线程信息,查看线程的堆栈。

thread -n 3 -i 10000 可以统计 10 秒内最忙的 3 个线程,并且打印它们的堆栈,很容易发现问题。最终发现的问题比较简单:日志中打印了 location 的信息,包括 类名、方法名和行号。

动态获取代码的方法名、行号等信息,通常是通过 new Throwable() -> 打印 Throwable 的堆栈 -> 截取堆栈中最顶层的业务代码 -> 拆分字符串获取类、方法、行号等信息, 打印堆栈对性能损耗是比较大的。

场景 2:检测偶发的超时

有段时间,总是碰到几次偶尔的超时,但是看日志都正常,鹰眼的调用链路都完全 ok,没有哪一步数据库操作或者 HSF 调用是特别慢的。

各种监控统计的时间维度的耗时,都十分正常,无法找到那个 rt 的尖刺。

想到了可能是日志的问题,但是没有证据支撑。

trace 命令能监控每一步的耗时,并且可以配合条件表达式,当耗时超过 xx ms 时打印详细日志。

找台机器,输入命令,后面的就是静等了。再次出现 rt 尖刺时,能够捕捉到耗时的分布情况。

通过 Arthas 拿到的结果,定位到是日志打印的问题。同步日志改为异步日志后,问题解决。

场景3:debug?那要是动态字节码生成咋办?

之前碰到过一个 json 序列化时输出的数字带不带引号的问题。当时各种 debug、看代码,发现是通过 ASM 动态字节码的方式生成的序列化类。到这完全放弃了,debug 已经无法定位问题了。当时通过另外一种方式避免了这种问题。

反过来看这个问题的时候,我们可以通过 Arthas 的 jad 命令,反编译动态字节码生成的类,结合 watch 等命令,定位排查问题。

jad——反编译指定已加载类的源码

还可以通过 mc(menory compiler), redefine 命令线上热更新代码,欢迎探索。

最后

由于篇幅有限,这里就不一一罗列了,20道常见面试题(含答案)+21条MySQL性能调优经验小编已整理成Word文档或PDF文档,点击这里免费下载

MySQL全家桶笔记

还有更多面试复习笔记分享如下

Java架构专题面试复习

322)]

还有更多面试复习笔记分享如下

[外链图片转存中…(img-CEAPVj6E-1626170180324)]

面试官,不要再问我“javagc垃圾回收机制”了

JavaGC垃圾回收几乎是面试必问的JVM问题之一,本篇文章带领大家了解JavaGC的底层原理,图文并茂,突破学习及面试瓶颈。楔子-JVM内存结构补充JVM中堆的结构图图中展示了堆中三个区域:Eden、FromSurvivor、ToSurvivor。从图中可以也可... 查看详情

java核心面试宝典day13面试官最爱问的“进程”面试题(代码片段)

...活变得更智能、世界变得更有趣!在此专栏《Java核心面试 查看详情

java核心面试宝典day13面试官最爱问的“进程”面试题(代码片段)

...活变得更智能、世界变得更有趣!在此专栏《Java核心面试 查看详情

面试官常问的垃圾回收器,这次全搞懂(代码片段)

...的垃圾回收器有哪些以及每个垃圾回收器的特点,这也是面试的时候经常被问的内容JVM堆内存概览在聊垃圾回收器之前,我们先来看看JVM堆内存的区域划 查看详情

面试官:你对jvm垃圾收集器了解吗?13连问你是否抗的住!

关于JVM垃圾收集器的面试题1、简述Java垃圾回收机制2、GC是什么?为什么要GC3、垃圾回收的优点和原理。并考虑2种回收机制4、垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃... 查看详情

面试官:你对jvm垃圾收集器了解吗?13连问你是否抗的住!

关于JVM垃圾收集器的面试题1、简述Java垃圾回收机制2、GC是什么?为什么要GC3、垃圾回收的优点和原理。并考虑2种回收机制4、垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃... 查看详情

面试官最常问的垃圾回收器cms

前言随着互联网技术的发展,线上用户量的大量增加,性能问题变得尤为重要,我们可以通过增大JVM的各项内存来解决一部分问题,但是这样总是片面的应该双管齐下,既要从硬件方面变得逐渐强大,底层... 查看详情

面试必问:java垃圾回收机制(代码片段)

摘要:垃圾回收机制是守护线程的最佳示例,因为它始终在后台运行。本文分享自华为云社区《一文带你了解Java中的垃圾回收机制》,作者:海拥。介绍在C/C++中,程序员负责对象的创建和销毁。通常程... 查看详情

java面试之——gc垃圾回收机制

一、JVM架构图分析下图:参考网络+书籍,如有侵权请见谅一、要回收哪些区域在JVM内存模型中,有三个是不需要进行垃圾回收的:程序计数器、JVM栈、本地方法栈。因为它们的生命周期是和线程同步的,随着线程的销毁,它们... 查看详情

阿里面试官:垃圾回收都不懂?来面试?

面试官:我还记得上次你讲到JVM内存结构(运行时数据区域)提到了「堆」,然后你说是分了几块区域嘛面试官:当时感觉再讲下去那我可能就得加班了面试官:今天有点空了,继续聊聊「堆」那块吧... 查看详情

jvm的垃圾回收(gc)超全解析,面试官看了直呼内行!!还不快收藏起来

我是目录:1、垃圾回收的时机:2、垃圾回收机制------如何判断对象已死?3、需要垃圾回收的内存:4、垃圾回收算法:5、垃圾回收过程:6、垃圾收集器:GarbageCollection(GC),Java进程在启... 查看详情

gc(垃圾处理机制)面试题

  1: 详细解释Java中垃圾收集的主要流程。 垃圾收集主要有两种形式:手工、自动自动会不定期进行回收,以释放无用的空间手工调用的是System类中的gc()方法,此方法实际上调用的是Runtime类中的gc()方法,当一个对... 查看详情

013gc机制(代码片段)

...ps://www.cnblogs.com/shudonghe/p/3457990.html最近还是在找工作,在面试某移动互联网公司之前认为自己对Java的GC机制已经相当了解,其他面试官问的时候也不存在问题,直到那天该公司一个做搜索的面试官问了我GC的问题,具体就是:老... 查看详情

java垃圾回收机制

目录java垃圾回收机制垃圾回收机制概述内存管理垃圾回收相关算法通用的分代垃圾回收机制垃圾回收垃圾回收过程:JVM调优java垃圾回收机制来源:http://www.sxt.cn/Java_jQuery_in_action/The_garbage_collection_mechanism.html垃圾回收机制概述内存... 查看详情

备战秋招冲击大厂java面试题系列—jvm及垃圾回收机制(代码片段)

1.JVMJVM的作用:解释运行字节码程序消除平台相关性。jvm将java字节码解释为具体平台的具体指令。一般的高级语言如要在不同的平台上运行,至少需要编译成不同的目标代码。而引入JVM后,Java语言在不同平台上运行... 查看详情

java垃圾回收学习笔记

...对于系统调优有直接帮助增加和同行聊天或者下一份工作面试时的谈资在追求技术卓越上更进一 查看详情

图解java垃圾回收机制

图解Java垃圾回收机制。 查看详情

应届生/社招面试最爱问的几道java基础问题(代码片段)

...录自笔者开源的JavaGuide:https://github.com/Snailclimb(【Java学习+面试指南】一份涵盖大部分Java程序员所需要掌握的核心知识)如果觉得不错的还,不妨去点个Star,鼓励一下!一为什么Java中只有值传递?首先回顾一下在程序设计语言中有... 查看详情