阿里面试官:死循环创建new一个对象会发生什么

这是阿里风控部门一面的题目

当时我想当然说栈溢出,面试官也没多说,接着又问我cpu和内存会怎么样

我当时说抛出oom之后cpu负载应该降下来,因为守护线程gc都随着主线程的结束而结束

 

回来稍微摸你了一下,写了一些感悟如下:

死循环创建哈希map,cpu负载400,内存4299M 4G

但是就是不报错,也没有说继续升高负载和内存--->这个内存刚好是这台mac的1/4内存

也就是说这是最大堆内存,而这台电脑是8核超线程的,16负载相当于,cpu负载也刚好1/4,真的这么巧合吗,我想一定有默认参数设置了的

这里内存一直在4G堆最大,说明GC一直处在回收的状态,堆内存刚好卡在临界点

个人猜想本身一次循环结束是会进入safePoint开始垃圾回收,但是由于你在执行死循环,那么实际上创建的速度远大于GC回收的速度,一开始Parall回收器并没有开很多的垃圾回收线程来清理这些垃圾,但是随着堆空间逐渐被沾满,垃圾回收线程增加的越来越多,最终产生了一个平衡点,就是你的创建速度和我的回收速度达成一致,但内存还是满的,如果我的回收速度大于了你的创建速度,才有可能清理掉我堆中的4G哈希map

CPU 400的负载来自多路并行的垃圾回收线程

重新试了一下,cpu和内存几乎是在1秒内飙升到400和4G,也就是说启动需要一个过程,这之前死循环创建对象的能力大于垃圾回收的能力,所以才会有4G的堆满空间

实际开发经验还是太少,如果错了,以后再更正自己的想法吧。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值