热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

【消息队列】06避免内存溢出和频繁的垃圾回收

内存如果溢出,通过自动内存管理机制实现,垃圾回收是不可控的,但是可以降低回收的频率。自动内存管理机制的实现原理—避免内存溢出1申请内存

内存如果溢出,通过自动内存管理机制实现,垃圾回收是不可控的,但是可以降低回收的频率。
在这里插入图片描述

自动内存管理机制的实现原理 —避免内存溢出1

申请内存过程

  • 计算要创建对象所需要占用的内存大小
  • 在内存中找一块儿连续并且是空闲的内存空间,标记为已占用;
  • 把申请的内存地址绑定到对象的引用上,这时候对象就可以使用了。

垃圾回收过程— 标记、清除两阶段

标记阶段:从 GC Root 开始,你可以简单地把 GC Root 理解为程序入口的那个对象,标记所有可达的对象,因为程序中所有在用的对象一定都会被这个 GC Root 对象直接或者间接引用。

清除阶段:遍历所有对象,找出所有没有标记的对象。这些没有标记的对象都是可以被回收的,清除这些对象,释放对应的内存即可。内存释放后进行内存碎片整理,将不连续空闲的内存移动到一起

注意 :标记和清除过程中,必须把进程全部暂停,否则计算的结果就是不准确的,进程暂定可能会在造成程序卡死。

垃圾回收什么时候被触发?

用户请求服务,程序运行创建对象,程序结束,或内存不足,触发垃圾回收机制,开始清理对象。

高并发程序为什么会卡死?

高并发短时间内创建海量对象,迅速沾满内存,内存空间短缺,被迫启动垃圾回收机制,垃圾回收导致进程长时间暂停,长时间暂停进而导致大量请求积压,即使垃圾回收结束,此时又来了大量请求,频繁启动垃圾回收机制,恶性循环,内存溢出

高并发管理技巧 — 低垃圾回收频率


  • 优化代码中处理请求的业务逻辑,尽量少产生一次性对象,和占用内存较大的对象
  • 考虑内存占用比较大的对象是否可以反复重用且可以自行回收(创建对象池,用的时候取,不用的时候在放回去)

推荐阅读
  • 关于进程的复习:#管道#数据的共享Managerdictlist#进程池#cpu个数1#retmap(func,iterable)#异步自带close和join#所有 ... [详细]
  • 在iOS开发中,多线程技术的应用非常广泛,能够高效地执行多个调度任务。本文将重点介绍GCD(Grand Central Dispatch)在多线程开发中的应用,包括其函数和队列的实现细节。 ... [详细]
  • 面试题总结_2019年全网最热门的123个Java并发面试题总结
    面试题总结_2019年全网最热门的123个Java并发面试题总结 ... [详细]
  • 本文将深入探讨 iOS 中的 Grand Central Dispatch (GCD),并介绍如何利用 GCD 进行高效多线程编程。如果你对线程的基本概念还不熟悉,建议先阅读相关基础资料。 ... [详细]
  • RocketMQ在秒杀时的应用
    目录一、RocketMQ是什么二、broker和nameserver2.1Broker2.2NameServer三、MQ在秒杀场景下的应用3.1利用MQ进行异步操作3. ... [详细]
  • Java高并发与多线程(二):线程的实现方式详解
    本文将深入探讨Java中线程的三种主要实现方式,包括继承Thread类、实现Runnable接口和实现Callable接口,并分析它们之间的异同及其应用场景。 ... [详细]
  • 本文详细介绍了数据库并发控制的基本概念、重要性和具体实现方法。并发控制是确保多个事务在同时操作数据库时保持数据一致性的关键机制。文章涵盖了锁机制、多版本并发控制(MVCC)、乐观并发控制和悲观并发控制等内容。 ... [详细]
  • 本文总结了一些开发中常见的问题及其解决方案,包括特性过滤器的使用、NuGet程序集版本冲突、线程存储、溢出检查、ThreadPool的最大线程数设置、Redis使用中的问题以及Task.Result和Task.GetAwaiter().GetResult()的区别。 ... [详细]
  • 我自己做了一个网站图片的抓取,感觉速度有点慢抓取4000张图片可能得用15分钟左右的时间,我百度看用线程可以加快抓取,然后创建了5个线程抓取,但是5个线程是同步执行同样的操作一个图片就 ... [详细]
  • 普通树(每个节点可以有任意数量的子节点)级序遍历 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 并发控制与流程管理
    本文详细介绍了几种常用的并发控制工具及其应用场景,帮助开发者更好地管理和协调多线程程序中的并发流程。 ... [详细]
  • 河北省工业和信息化厅公文收发管理系统
    河北省工业和信息化厅及其下属各地市工信管理部门之间的文件传输主要依赖于纸质或电子邮件方式,这种方式存在效率低下、安全性差等问题。为了解决这些问题,省工信厅计划开发一套公文收发管理系统,实现文件的电子化和统一管理。 ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • 本文总结了在SQL Server数据库中编写和优化存储过程的经验和技巧,旨在帮助数据库开发人员提升存储过程的性能和可维护性。 ... [详细]
author-avatar
读书洗_心__灵_780
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有