zoukankan      html  css  js  c++  java
  • 高并发下的内存管理技巧

      1、为何高并发下容易oom

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

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

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

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

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

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

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

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

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

      

      

  • 相关阅读:
    Javascript FP-ramdajs
    微信小程序开发
    SPA for HTML5
    One Liners to Impress Your Friends
    Sass (Syntactically Awesome StyleSheets)
    iOS App Icon Template 5.0
    React Native Life Cycle and Communication
    Meteor framework
    RESTful Mongodb
    Server-sent Events
  • 原文地址:https://www.cnblogs.com/volare/p/12305552.html
Copyright © 2011-2022 走看看