Java-JVM内存区域划分

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/zhangdong2012/article/details/81151714

个人理解记录

程序计数器:线程私有的内存区域,每个线程在执行时都有自己的程序计数器,主要作用是记录当前线程执行的字节码的行号,在cpu进行线程切换/恢复时,使程序能够恢复到正确的位置执行,它是内存区域中唯一一块不会抛出异常的。

虚拟机栈:线程私有的内存区域,是方法调用的抽象,每个方法调用对应一个栈帧,栈帧中存储局部变量表/方法返回地址等信息,一次方法调用对应一个栈帧的入栈,一次方法调用的完成对应一个栈帧的出栈,会出现OOM异常和StackOverFlowexception

本地方法栈:作用与虚拟机栈相同,区别在于本地方法栈作用于本地方法的调用,会出现OOM和StackOverflowException

方法区:方法区也称为永久代,在最新的jdk版本中已经被元数据区替代,方法区中主要存储类的class对象,已经一些常量和静态变量等。方法区内存只有full gc才能进行回收,会出现OOM异常。

堆:堆是jvm管理的最大也是醉重要的一块内存区域,几乎所有的对象都是在堆上分配,堆也是GC的主要区域,由于对GC效率的考虑,对内存往往被划分为新生代和老年代,新生代又被划分为eden区和servivor区,在新生代采用复制算法进行GC,在老年代用标记清除和标记整理算法进GC,堆内存会出现OOM异常

猜你喜欢

转载自blog.csdn.net/zhangdong2012/article/details/81151714