跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 关于 jvm 面试
未分類
24 3 月 2020

关于 jvm 面试

关于 jvm 面试

資深大佬 : zxc1234 7

面了某大厂,一面上来就是遇到过 jvm crash 吗

我只好说没遇到过

想问下大家这种 jvm crash 遇到过吗 经常吗

迷茫~求指教~

大佬有話說 (23)

  • 資深大佬 : hhhsuan

    内存不够就会 crash

  • 資深大佬 : mazai

    就是想问你一些调优的经验而已,你没遇到过不就没说了,编也编一个 OOM 的情况了吧,老哥,多半凉了

  • 資深大佬 : Mohanson

    就个人经验, divide by zero, 内存越界, 内存未对齐, 超过最大栈深度, 结构化指令嵌套错误都能 crash 掉 vm. 虽然我没用过 JVM, 但按照 Webassembly 虚拟机来说就是这样…

  • 主 資深大佬 : zxc1234

    @mazai oom 是 crash ??

  • 資深大佬 : chihiro2014

    @zxc1234 crash (可以理解为崩溃),oom 自然算。不过问 jvm 问题没意义,不如把代码写好点

  • 資深大佬 : vk42

    @zxc1234 可能指爆 heap 吧,OOM 一般是 OS 行为,和 JVM 本身关系不大

  • 資深大佬 : lewis89

    @vk42 #6 JVM 可以设置堆大小,怎么会没有关系,OOM 不是 bark 调用申请不到物理内存了,而是 JVM 自己抛异常了

  • 資深大佬 : lewis89

    @mazai #2 说实话 OOM 遇到的情况也很少,业务代码里面的对象 大多都是栈上的引用指向它们,业务逻辑流程的栈空间一弹出,这些对象基本上就死了,基本上不存在业务代码会 OOM 的情况,OOM 大多发生在框架代码里,它们会使用一些 GCRoots 节点 类的静态变量 会引用这些对象,然后没有释放 才会发生 OOM 的情况

  • 資深大佬 : vk42

    @lewis89 好吧,我们这边一般把 jvm 的 OOM exception 叫爆 heap,说 OOM 的话一般是指 OS 的 OOM handler 。怪我没说清……

  • 資深大佬 : cheng6563

    用 openj9 时遇到过

  • 資深大佬 : pursuer

    @cheng6563 #10 今天刚好碰到一个 libgdx 上 jni 访问越界造成 jvm 崩溃的问题,把源码全部扒出来查了半天最后发现是 openj9 的问题,换上了 zulujdk11 就好了。。。

  • 資深大佬 : tension2012

    jvm crash 的时候,会生成一个 hs_err_pidxxx.log, 里面的内容就是会记录 jvm crash 的时候,寄存器,堆,加载的动态库等的情况,要让 jvm crash,其实很简单, 就是执行 kill -11 {pid}, 它就会 crash 掉

  • 資深大佬 : fewok

    所以,问这个的意义是什么??考察你之前的公司是否经常 crash ?还是你是否喜欢探索异常处理?

  • 資深大佬 : ligiggy

    @fewok 如果你现在面试的公司,有对这方面有要求,他就不会管你之前有没有或者说需不需要从事相关事务。也许这对面试者来说,很不公平,但是面试官并不是出于考察你在前公司的表现为前提的。

  • 資深大佬 : mazai

    @ligiggy 老哥正解,其实就是考察你有没有相关的经验,或者对这方面研究的深不深。

  • 資深大佬 : yinzhili

    就怕是面试造导弹,工作拧螺丝

  • 主 資深大佬 : zxc1234

    问题是,现在不是很多 crash 都 try catch 住了吗,还问有没有遇到。。。

  • 主 資深大佬 : zxc1234

    @ligiggy
    @mazai

    上

  • 資深大佬 : dousha99

    @zxc1234 #17 crash 一般是无法被 catch 的,它和 exception 不同。crash 是发生严重的、不可恢复的错误才会出现的。

  • 主 資深大佬 : zxc1234

    @dousha99 三所说的 divide by zero 不就是可以 catch ??还是说 divide by zero 不是 crash ?

  • 資深大佬 : dousha99

    @zxc1234 #20 Java 里面除以 0 不是 crash 是 exception: java.lang.ArithmeticException.

    不过硬要说的话,除非是内部错误(比如 JNI 库中的或者 JVM 本身的非法内存访问),否则类似与内存耗尽这样的应该导致 crash 的异常也是可以被 catch 的。不过一般情况下不会尝试 catch 这类异常。

    其实 crash 更像是一种结果而不是一个过程。JVM 进程异常退出了,我们就认为发生了 crash, 哪怕这只是因为一个没有 catch 到的异常。

  • 主 資深大佬 : zxc1234

    @dousha99 也就是说如果 除以 0 没有被捕获,它是有可能导致 jvm 进程异常退出的吧?那我是不是可以理解 除以 0 也可能导致 crash ?

    还有平时项目中会遇到内部错误吗?这种情况多吗?我好像没怎么遇到过 JNI 库中的或者 JVM 本身的非法内存访问 这种情况??

  • 資深大佬 : dousha99

    @zxc1234 #22 是的,可以认为如果 /0 没有捕获也会导致 crash.

    至于平时项目,真正能见到的最常见的 crash 算是 NullPointerException, IndexOutOfBoundsError 其次是 OutOfMemoryError. 不过如果平常只是写写 CRUD, 那么在各种框架和静态代码分析的加持下就都很难见到(当然,一旦见到就说明出大事了)。JNI 库的话自己写不经意的话就容易出 segfault. JVM 的非法内存访问就更罕见了。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具