码迷,mamicode.com
首页 > 其他好文 > 详细

高并发下的内存管理技巧

时间:2020-02-13 23:04:29      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:业务流程   产生   情况   算法   short   空闲   溢出   内存溢出   过程   

  1、为何高并发下容易oom

    1)首先我们了解当执行垃圾回收的时候,会导致进程暂停,从而使我们的程序卡死;进程长时间暂停,又会导致大量的请求积压等待处理,垃圾回收刚刚结束,更多的请求立刻涌进来,迅速占满内存,再次被迫执行垃圾回收,进入了一个恶性循环。如果垃圾回收的速度跟不上创建对象的速度,还可能会产生内存溢出的现象。

  所以说往往在高并发的情况下更容易发生oom。

    2)除此之外垃圾回收算法产生内存碎片也会产生影响。内存碎片在GC执行标记-清除算法时产生,当完成对象的回收后,会需要再整理内存碎片,将不连续的空闲内存移动到一起,以便空出足够的连续内存空间供后续使用。和垃圾回收算法一样,内存碎片整理也有很多非常复杂的实现方法,但由于整理过程中需要移动内存中的数据,也都不可避免地需要暂停进程。

    内存碎片举例来说:内存中有10个字节,初始化了5个short类型的对象,每个short占2字节,程序运行一段时间后,有两个short使用后被回收了,此时有想新建一个int,这时可能是不成功的,

因为回收掉的两个short可能不是连续的,但是创建int必须是连续的4个字节,所以就产生了占用空间的内存碎片。

  2、高并发下的内存管理技巧

    1)尽量少的创建对象,优化业务处理逻辑,特别是占用内存大的对象。例如:我们可以把收到请求的 Request 对象在业务流程中一直传递下去,而不是每执行一个步骤,就创建一个内容和 Request 对象差不多的新对象。

    2)考虑自行回收并重用对象。建立一个对象池。收到请求后,在对象池内申请一个对象,使用完后再放回到对象池中,这样就可以反复地重用这些对象,非常有效地避免频繁触发垃圾回收。

    3)尽可能使用内存大的服务器

  

  

高并发下的内存管理技巧

标签:业务流程   产生   情况   算法   short   空闲   溢出   内存溢出   过程   

原文地址:https://www.cnblogs.com/volare/p/12305552.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!