绿皮驿站

杂记
通过阅读《深入理解Java虚拟机》解决内存溢出问题

之前发生的内存溢出问题虽然让我很发愁,但是我也很兴奋,于是我找了本电子书来看《深入理解Java虚拟机》。

在好奇心和求知欲的强烈驱使下,我天天泡自习室,有种看小说的感觉,很想知道后面发生了什么。

通过阅读,我了解到Java的Class文件是什么样子的,如何被虚拟机加载的,内存的分配,还有牛逼哄哄的垃圾收集器,什么新生代、老年代。

很自然的就能解决之前那个问题,把java堆的大小调大一点,但治标不治本,用户量上去了还是顶不住的。

叮!新生代与老年代,之前的缓存空间的生命周期是这样的,当用户连接分配空间,当用户断开释放空间。

但是,用户只有在传输大量数据的时候才耗费比较大的空间,例如传输存档的时候。但一般情况下,只需传几百字节的数据。

那就让垃圾收集器动起来吧,每当用户缓存完数据就立刻释放空间,虽然舍弃了点性能,但还能勉强保证服务器稳定。

也就是吧缓存空间由老年代转到新生代,热回收。

当然如果内存真不够用,还可以模仿linux的wap空间,把数据存到硬盘上,但非常影响性能,想想还是算了吧...


垃圾收集器帮我们回收掉不用的对象,好在开发效率高,但垃圾收集器也是个程序,也是需要消耗cpu、内存的,而且还有个著名的操作“STW”Stop The World。

像C\C++这种,需要自己管理内存,操作不当容易内存泄漏,但是性能强悍。

就好比手动挡和自动挡的汽车,见仁见智。

我曾经看过一辆车在红灯转绿灯后迟迟未动,我知道原因,是手动挡...


发布于 2017年9月24日   浏览(2,031)