JVM知识点v1.0

JVM

1.Jvm组成

Jvm

  • 类加载器:将.class文件加载到内存
  • 方法区: 存储已被虚拟机加载的类信息、常量、静态变量,以及编译之后的代码缓存...
  • 栈空间: 虚拟机栈,存储基本数据类型(作为局部变量的时候)、动态链接(引用)、方法出口...
  • 本地方法栈: Java与操作系统底层或硬件交互 Native本地方法服务,调用非java语言
  • 堆空间: 存放实例对象、数组
    • 永久区: 运行环境必须的类信息 不会被垃圾回收掉
    • 新生区:包括 伊甸区(新创建的对象) 幸存者区(筛选长寿目标)
    • 老年代:存储长期生活的对象
  • 程序计数器: 每个线程都有一个程序计数器,就是一个指针,指向方法区中的方法字节码(用来存储下一条将要执行的字节码指令的地址),记录程序执行位置

2.对象创建的过程

对象创建过程

3.堆内存如何分配

  • 指针碰撞
    • 适用于管理简单、碎片化较少的内存区域,如年轻代
    • 在分配内存时,Java 虚拟机会维护一个指针,指向下一个可用的内存地址,每次分配内存时,只需要将指针向后移动一段距离,如果没有发生碰撞,就将这段内存分配给对象实例。
  • 空闲列表
    • 适用于内存碎片化较严重或对象大小差异较大的场景,如老年代
    • JVM 维护一个列表,记录堆中所有未占用的内存块并记录大小和地址信息。当有新的对象请求内存时,JVM 会遍历空闲列表,寻找足够大的空间来存放新对象。

4.JVM怎么访问对象

  • 句柄
    • 句柄是通过一个中间的句柄表来定位对象的
  • 直接指针
    • 直接指针则是通过引用直接指向对象的内存地址。
posted @ 2025-08-16 13:59  Charon-YC  阅读(12)  评论(0)    收藏  举报