关于 jvm 面试 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
zxc1234
V2EX    程序员

关于 jvm 面试

  •  
  •   zxc1234 2020-05-03 22:58:26 +08:00 4458 次点击
    这是一个创建于 1988 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    我只好说没遇到过

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

    迷茫~求指教~

    24 条回复    2020-05-09 15:58:54 +08:00
    hhhsuan
        1
    hhhsuan  
       2020-05-03 23:03:05 +08:00 via Android
    内存不够就会 crash
    mazai
        2
    mazai  
       2020-05-03 23:36:31 +08:00
    就是想问你一些调优的经验而已,你没遇到过不就没说了,编也编一个 OOM 的情况了吧,老哥,多半凉了
    Mohanson
        3
    Mohanson  
       2020-05-03 23:40:49 +08:00
    就个人经验, divide by zero, 内存越界, 内存未对齐, 超过最大栈深度, 结构化指令嵌套错误都能 crash 掉 vm. 虽然我没用过 JVM, 但按照 Webassembly 虚拟机来说就是这样...
    zxc1234
        4
    zxc1234  
    OP
       2020-05-04 00:36:07 +08:00
    @mazai oom 是 crash ??
    chihiro2014
        5
    chihiro2014  
       2020-05-04 01:07:44 +08:00
    @zxc1234 crash (可以理解为崩溃),oom 自然算。不过问 jvm 问题没意义,不如把代码写好点
    vk42
        6
    vk42  
       2020-05-04 06:17:08 +08:00
    @zxc1234 可能指爆 heap 吧,OOM 一般是 OS 行为,和 JVM 本身关系不大
    lewis89
        7
    lewis89  
       2020-05-04 10:08:02 +08:00
    @vk42 #6 JVM 可以设置堆大小,怎么会没有关系,OOM 不是 bark 调用申请不到物理内存了,而是 JVM 自己抛异常了
    lewis89
        8
    lewis89  
       2020-05-04 10:19:17 +08:00
    @mazai #2 说实话 OOM 遇到的情况也很少,业务代码里面的对象 大多都是栈上的引用指向它们,业务逻辑流程的栈空间一弹出,这些对象基本上就死了,基本上不存在业务代码会 OOM 的情况,OOM 大多发生在框架代码里,它们会使用一些 GCRoots 节点 类的静态变量 会引用这些对象,然后没有释放 才会发生 OOM 的情况
    vk42
        9
    vk42  
       2020-05-04 10:33:12 +08:00
    @lewis89 好吧,我们这边一般把 jvm 的 OOM exception 叫爆 heap,说 OOM 的话一般是指 OS 的 OOM handler 。怪我没说清……
    cheng6563
        10
    cheng6563  
       2020-05-04 14:06:12 +08:00 via Android
    用 openj9 时遇到过
    pursuer
        11
    pursuer  
       2020-05-05 00:37:51 +08:00
    @cheng6563 #10 今天刚好碰到一个 libgdx 上 jni 访问越界造成 jvm 崩溃的问题,把源码全部扒出来查了半天最后发现是 openj9 的问题,换上了 zulujdk11 就好了。。。
    tension2012
        12
    tension2012  
       2020-05-05 09:59:23 +08:00
    jvm crash 的时候,会生成一个 hs_err_pidxxx.log, 里面的内容就是会记录 jvm crash 的时候,寄存器,堆,加载的动态库等的情况,要让 jvm crash,其实很简单, 就是执行 kill -11 {pid}, 它就会 crash 掉
    fewok
        13
    fewok  
       2020-05-05 12:48:37 +08:00
    所以,问这个的意义是什么??考察你之前的公司是否经常 crash ?还是你是否喜欢探索异常处理?
    ligiggy
        14
    ligiggy  
       2020-05-05 15:17:20 +08:00
    @fewok 如果你现在面试的公司,有对这方面有要求,他就不会管你之前有没有或者说需不需要从事相关事务。也许这对面试者来说,很不公平,但是面试官并不是出于考察你在前公司的表现为前提的。
    mazai
        15
    mazai  
       2020-05-05 15:39:10 +08:00
    @ligiggy 老哥正解,其实就是考察你有没有相关的经验,或者对这方面研究的深不深。
    yinzhili
        16
    yinzhili  
       2020-05-05 17:17:09 +08:00
    就怕是面试造导弹,工作拧螺丝
    zxc1234
        17
    zxc1234  
    OP
       2020-05-05 20:06:54 +08:00
    问题是,现在不是很多 crash 都 try catch 住了吗,还问有没有遇到。。。
    zxc1234
        18
    zxc1234  
    OP
       2020-05-05 20:12:35 +08:00
    @ligiggy
    @mazai

    楼上
    dousha99
        19
    dousha99  
       2020-05-05 20:49:28 +08:00
    @zxc1234 #17 crash 一般是无法被 catch 的,它和 exception 不同。crash 是发生严重的、不可恢复的错误才会出现的。
    zxc1234
        20
    zxc1234  
    OP
       2020-05-05 20:53:05 +08:00
    @dousha99 三楼所说的 divide by zero 不就是可以 catch ??还是说 divide by zero 不是 crash ?
    dousha99
        21
    dousha99  
       2020-05-05 21:04:58 +08:00
    @zxc1234 #20 Java 里面除以 0 不是 crash 是 exception: java.lang.ArithmeticException.

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

    其实 crash 更像是一种结果而不是一个过程。JVM 进程异常退出了,我们就认为发生了 crash, 哪怕这只是因为一个没有 catch 到的异常。
    zxc1234
        22
    zxc1234  
    OP
       2020-05-05 21:11:09 +08:00
    @dousha99 也就是说如果 除以 0 没有被捕获,它是有可能导致 jvm 进程异常退出的吧?那我是不是可以理解 除以 0 也可能导致 crash ?

    还有平时项目中会遇到内部错误吗?这种情况多吗?我好像没怎么遇到过 JNI 库中的或者 JVM 本身的非法内存访问 这种情况??
    dousha99
        23
    dousha99  
       2020-05-05 21:23:37 +08:00
    @zxc1234 #22 是的,可以认为如果 /0 没有捕获也会导致 crash.

    至于平时项目,真正能见到的最常见的 crash 算是 NullPointerException, IndexOutOfBoundsError 其次是 OutOfMemoryError. 不过如果平常只是写写 CRUD, 那么在各种框架和静态代码分析的加持下就都很难见到(当然,一旦见到就说明出大事了)。JNI 库的话自己写不经意的话就容易出 segfault. JVM 的非法内存访问就更罕见了。
    peachpeach
        24
    peachpeach  
       2020-05-09 15:58:54 +08:00 via iPhone
    嵌入式菜鸡弱弱路过,内存问题是基础。
    内存不够,会导致 oom,这很常见的。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2909 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 14:17 PVG 22:17 LAX 07:17 JFK 10:17
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86