Java虚拟机学习笔记——JVM内存模型

Java虚拟机学习笔记——JVM内存模型

Java基于虚拟机的自动内存管理机制,我们不需要为每一个对象进行释放内存,不容易发生内存泄漏和内存溢出问题。

但是自动内存管理机制不是万能药,我们仍需要了解JVM内存模型,以便在Java程序运行时发生错误的时候可以快速定位,并解决。

内存模型图

方法区(Method Area):线程共享存储被JVM加载的类信息、常量、静态变量、编译器编译后的代码等数据。

Java堆(Java Heap):线程共享,用于存储对象实例,是垃圾收集器(GC)管理的主要区域,其中细分为:新生代(Eden空间、From Survivor空间、To Survivor空间)和老年代。

虚拟机栈(Java Virtual Machine Stacks): 线程私有,每个方法在执行时会创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息。一个方法调用至执行完成,就对应一个栈帧从入栈到出栈。

程序计数器(Program Counter Register):线程私有,可以看成当前程序执行的字节码的行号指示器,字节码通过改变程序计数器的值来选取下一条需要执行的字节码指令,Java的分支、循环、跳转、异常处理、线程恢复等都基于程序计数器。

本地方法栈(Native Method Stack): 线程私有,本地方法栈与虚拟机栈相似,虚拟机栈为执行Java字节码服务,本地方法栈则为Native方法服务。

猜你喜欢

转载自www.cnblogs.com/joe2047/p/10527649.html