对象内存布局和分配过程
对象内存布局

对象内存分配过程
-
对象新建优先分配在 Eden 区(大对象会直接分配到老年代,多大的对象是大对象可以配置)
-
当 Eden 满了,还有对象进来,触发 minor GC
-
minor GC 过程
如果是垃圾(引用计数法、可达性法确定是否是垃圾)就删除,如果不是垃圾,就把对象移动到幸存1区,存活对象年龄+1,此时伊甸园为空,s0 有对象,s1 为空
如果还有对象创建,再次放不下,继续触发 minior GC
-
幸存区也要 GC,先 GC 幸存区,把 s0 的垃圾回收,然后把 Eden 存活的对象移动到 s0
-
把 s0 的对象复制到 s1
原来 s1 是空,现在 s0 是空,两个幸存区总有一个是空的,也就是会浪费一半的空间,所以幸存区不要设置过大,至于为什么要这样,因为每个区有不同的垃圾回收算法,后面 GC 的时候说
幸存区的两个区也有说成 from 和 to 区,哪个为空,哪个就是 to 区
-
-
只要新生代空间够,就不停发生 minor GC,幸存区的 from 和 to 就不停交换复制,当对象年龄达到 15(默认,可以改)时,对象放入老年代
-
老年代空间不够的时候,发生 full GC,老老年代内存不足时,发生 OOM
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具