JVM内存区域主要分为线程私有区域(程序计数器、虚拟机栈、本地方法区),线程共享区域(Java堆、方法区),直接内存。
1. 程序计数器(线程私有区域)
是一块较小的内存空间,是当前线程所执行字节码的行号指示器,每条线程都有一个独立的程序计数器。如果正在执行java方法的话,程序计数器记录的是虚拟机字节码指令的地址。这个内存区域是唯一没有规定任何OutOfMemoryError情况的区域。
2. 虚拟机栈(线程私有区域)
是描述Java方法执行的内存模型,每个方法在执行的同时都会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。
3. 本地方法区(线程私有区域)
本地方法区和虚拟机栈的作用类似,只不过虚拟机栈是为执行Java方法服务,而本地方法区是为native方法服务。
4. Java堆(线程共享)
Java堆是被线程共享的一块区域,创建的对象和数组都保存在Java堆内存中,也是垃圾收集器进行垃圾收集的最重要内存区域。Java堆从GC的角度也可以分为新生代和老年代,新生代又可以分为Eden区、FromSurvivor区、ToSurvivor区。
5. 方法区(线程共享)
方法区用于存储被JVM加载的类信息、常量、静态变量、即时编译器编译后的代码等数据
会点Java,喜欢黑丝
喜欢的bro可以关注本人公众号