jvm运行时数据区域有哪几部分组成,各自作用,jvm区域包括哪些
先看图:
如何解决写爬虫IP受阻的问题?立即使用。
java相关视频教程:Java课程
1.程序计数器(PC)
是线程专有的。它是一个小内存,是当前线程执行的字节码的行号指示符,也是Java虚拟机规范中唯一没有指定为OOM(OutOfMemoryError)的区域。
2.Java虚拟机栈
是线程专有的。生命周期和线程是一样的。是Java方法执行的内存模型。执行每个方法都会创建一个堆栈框架,用于存储局部变量和操作数(对象引用)。局部变量所需的内存空间量是在编译期间分配的。因此堆栈帧的大小不会改变。
有两种异常情况:
1)如果线程请求深度大于堆栈深度,将抛出StackOverFlowError。
2)如果栈在动态扩展时不能请求足够的内存,将抛出OOM。
3.堆
Java堆由所有线程共享。在虚拟机启动时创建。它保存对象的实例和数组。它占用了最大的内存。可分为新生代(年轻区)和老区(老区)。新生代分为伊甸区和塞维尔区。服务区分为从空间区和到空间区。伊甸园区和服务器区的内存比为8: 1。当扩展内存大于可用内存时,将抛出OOM。
4.本地方法栈
本地方法堆栈是线程专有的。类似于Java虚拟机堆栈,但它不是服务于Java方法(字节码),而是服务于本地非Java方法。StackOverFlowError和OOM也被抛出。
5.方法区
该方法由所有线程共享。用于存储类信息、常量、静态变量和其他已经被虚拟机加载的数据,也称为非堆。该方法也称为“永久生成”。这方面很少进行GC,但不代表不会回收。本区域回收目标主要针对恒池和卸载类型的回收。当内存请求大于实际可用内存时,将抛出OOM。
java相关文章推荐:java简介以上是JVM中运行时数据区的细节。请多关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。