充分的了解下JVM运行时内存管理与分配

JVM运行时内存

Java堆从GC的角度可以细分为:新生代( Eden 区 、 From Survivor 区 和 To Survivor 区)和老年代

新生代

  • 用来存放新生的对象,占据堆的1/3空间。
  • 由于频繁创建对象,会频繁触发MinorGC进行垃圾回收

Eden 区

  • java新生对象的出生地
  • 如果创建的对象占用的内存很大,直接分配到老年代
  • 当Eden区内存不够的时候就会触发MinorGC,对新生代进行一次垃圾回收

ServivorFrom

  • 上一次GC的幸存者,作为这次GC的被扫描者

ServivorTo

  • 保留了一次MinorGC中的幸存者

MinorGC的过程(复制->清空->互换)

  • eden 、 servicorFrom 复制到 ServicorTo,对象年龄+1(若对象的年龄到达老年区的标准或者ServicorTo的内存不够位置,则直接赋值到来年代)
  • 清空 eden 、 servicorFrom
  • ServicorTo 和 ServicorFrom 互换

本文地址:https://blog.csdn.net/weixin_41747224/article/details/110228311

相关推荐:

为什么Python脚本在任务计划程序中由于路径问题无法运行?

根本原因是Windows任务计划程序默认工作目录为C:\Windows\System32,导致相对路径失效;需强制切换工作目录、使用绝对路径、配置完整Python解释器路径、显式添加环境变量、重定向日志并启用历史记录。 任务计划程序中Python脚本找不到模块或文件 根本原因不是Python本身出错...

为什么Python爬虫在Linux服务器上运行效率高于Windows?

Linux内核epoll机制以O(1)复杂度高效调度海量socket,而Windows默认回退低效select层;Linux服务器精简无GUI、定时器精准、文件系统优化好、PyPI轮子编译更激进,综合性能显著优于Windows。 Linux内核对网络IO的调度更高效 Python爬虫本质是IO密集型...

怎么优化Python中的字符串拼接操作以避免频繁的内存分配?

+拼接在循环中特别慢,因字符串不可变,每次s=s+item都新建对象并复制全部内容,时间复杂度达O(n²),引发大量内存分配与垃圾回收;推荐用list.append()+''.join()降至O(n)。 为什么+拼接字符串在循环里特别慢? Python中的字符串是不可变对象,每次用+拼接都会创建新字...

如何在 Python 中提前终止程序执行以避免后续代码运行

当用户输入无效数字时,需立即停止程序并输出错误提示,防止继续执行图像打印和电脑选择逻辑。本文介绍三种主流解决方案:使用exit()退出、合理缩进控制流程,以及封装为函数后用return提前返回。 当用户输入无效数字时,需立即停止程序并输出错误提示,防止继续执行图像打印和电脑选择逻辑。本文介绍三种主流...