JVM运行时的数据区域介绍
今天就跟大家聊聊有关JVM运行时的数据区域,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
成都创新互联公司是创新、创意、研发型一体的综合型网站建设公司,自成立以来公司不断探索创新,始终坚持为客户提供满意周到的服务,在本地打下了良好的口碑,在过去的10余年时间我们累计服务了上千家以及全国政企客户,如宣传片制作等企业单位,完善的项目管理流程,严格把控项目进度与质量监控加上过硬的技术实力获得客户的一致称扬。
首先看图:
1.程序计数器(PC)
是线程独享的。是一块较小的内存,是当前线程所执行的字节码的行号指示器,是Java虚拟机规范中唯一没有被规定OOM(OutOfMemoryError)的区域。
2.Java虚拟机栈
是线程独享的。生命周期和线程相同。是Java方法执行的内存模型。执行每个方法都会创建一个栈帧,用于存储局部变量和操作数(对象引用)。局部变量所需要的内存空间大小在编译期间完成分配。所以栈帧的大小是不会改变的。
存在两种异常情况:
1)若线程请求深度大于栈的深度,会抛出StackOverFlowError。
2)若栈在动态扩展的时候无法请求足够的内存,会抛出OOM。
3.堆
Java堆是所有线程共享的。是虚拟机启动的时候创建的。存放的是对象的实例和数组。所占内存最大。分为新生代(Young区)、老年代(Old区)。新生代又分为Eden区、Servior区。Servior区又分为From space区和To space区。Eden区和Servior区的内存比例为8:1。当扩展内存大于可用内存的时候,会抛出OOM。
4.本地方法栈
本地方法栈是线程独享的。与Java虚拟机栈类似,但不是为Java方法(字节码)服务,而是为本地非Java方法服务。也会抛出StackOverFlowError和OOM。
5.方法区
方法区是所有线程共享的。用于存储已经被虚拟机加载的类信息、常量、静态变量等数据,又称为非堆(Non-Heap)。方法区又称为“永久代”,GC很少在这个区域进行,但不代表不会回收。这个区域回收目标主要是针对常量池的回收和对类型的卸载。当内存申请大于实际可用内存时,会抛出OOM。
看完上述内容,你们对JVM运行时的数据区域介绍有进一步的了解吗?如果还想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读。
网站栏目:JVM运行时的数据区域介绍
浏览路径:http://pwwzsj.com/article/jjssph.html