JVM对象创建
1、JVM对象创建:java程序运行过程中,无时无刻都有对象被创建出来。在语言层面上就是new关键字。
2、JVM对象创建过程:
(1)JVM遇到一条new指令后,首先会去常量池中,检查这个指令的参数是否有一个类的符号引用,并检查这个符号引用代表的类是否被加载、解析、初始化过。如果没有就执行类加载过程。
(2)类加载检查通过后,JVM为新生对象分配内存。其中内存的大小在类加载完后即可完全确定,而分配内存空间其实就是在JVM堆中为对象划分出一块确定大小的内存。、
(3)内存分配完成后,虚拟机就将分配到的内存空间全都初始化为0值(不包括对象头)。
(4)虚拟机对对象进行必要的设置,设置对象头。如:对象是哪个类的实例、如何找到元数据信息、对象的哈希码、对象的GC分代年龄等信息。将这些设置信息存放在对象头中。
(5)在虚拟机层面此时已经完成了,但对于程序还应该执行<init>初始化操作。此时对象就创建完成了。
简化记忆过程:
(1)检查类是否加载,没加载就加载。
(2)分配内存
(3)初始化内存空间
(4)设置对象头
(5)完成创建
3、内存分配方式主要分为:指针碰撞、空闲列表
(1)指针碰撞:就是挪动指针,给对象分配一段完整的内存区域,这种方式针对的是堆内存比较完整的情况下。
(2)空闲列表:对于堆内存比较零散的情况下,可用的堆内存保存在空闲列表里面。
选择哪种分配方式,主要是由垃圾收集器的回收机制,是否带有压缩整理功能决定。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)