JVM内存

JVM内存结构

1.程序计数器(PCR)(线程私有)
复制代码
记录当前线程执行位置(字节码指令的地址),确保线程切换后能恢复到正确位置。
2.堆(Heap)(线程共享)
复制代码
堆是JVM内存中最大的一块,用于存储对象和数组。通过new关键字创建的对象都放在堆中,
堆中的对象需要考虑线程安全的问题,因为存在垃圾回收机制
3.虚拟机栈(线程私有)
复制代码
存储方法调用的栈帧,每个方法从调入到返回对应一个栈帧的入栈到出栈。
4.本地方法栈(线程私有)
复制代码
本地方法区和 Java Stack 作用类似,区别是虚拟机栈为执行 Java 方法服务,而本地方法栈则为Native方法服务。
5.方法区(线程共享)
复制代码
方法去用于存储被 JVM 加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
具体放在哪里,不同的实现可以放在不同的地方。
6.直接内存
复制代码
直接内存(Direct Memory)是在Java中使用较为底层的内存管理方式,它通过Java的NIO包中的ByteBuffer类来实现,
让Java能够在堆外分配内存。这种方式通常用于需要大量、频繁的IO操作的场景,
因为它可以减少在Java堆和本地堆之间复制数据的次数,从而提高性能。