JVM运行时数据区

发布时间:2019-11-19 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了JVM运行时数据区脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

Java虚拟机执行Java程序时,会把虚拟机管理的内存划分成不同的区域,用于处理程序运行过程中不同的数据。

Java虚拟机运行时数据区

程序计数器

线程私有@H_406_11@

对于一个处理器,只会执行一个线程的指令。线程并不是一直独享CPU的,多个线程通过切换的方式,实现一段时间内的同时执行。因此,为了线程切换后能恢复到切换前的执行位置,每个线程都需要有个独立的空间来记录执行位置,即程序计数器。各个线程之间的程序计数器互不影响,独立存储。

内存空间小

程序计数器中存储的为当前线程执行的指令:

  • 如果当前执行的是Java方法,程序计数器记录的是正在执行的虚拟机字节码指令地址
  • 如果执行的是Native方法,程序计数器记录的值为空

没有OutOfMemoryError情况

唯一在虚拟机规范中没有规定任何OutOfMemoryError情况的区域。

虚拟机栈

线程私有

栈帧结构

每个方法在执行时都会创建一个栈帧。栈帧存储了局部变量表、操作数栈、动态链接、方法出口等信息。方法从调用到执行完成对应了栈帧在虚拟机栈的入栈到出站过程。

StackOverflowError异常

栈是有深度(大小)的,当线程请求的栈深度大于了虚拟机允许的深度,则throw StackOverflowError。

OutOfMemoryError异常

如果虚拟机栈可动态扩展,当无法申请到足够的内存,则throw OutOfMemoryError。

堆是Java人员经常提及的一块内存区域,也是关注最多的一块区域。堆具有一下特点:

  • 通常是虚拟机管理的最大的一块区域
  • 被所有线程共享
  • 垃圾收集器管理的主要区域
  • OutOfMemoryError异常

从内存回收的角度来看,Java对可以分为新生代和老年代。

JVM运行时数据区

方法区

方法区是所有线程共享的内存区域,用来存储已经被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。方法区无法满足内存分配需求时,也会抛出OutOfMemoryError异常。

脚本宝典总结

以上是脚本宝典为你收集整理的JVM运行时数据区全部内容,希望文章能够帮你解决JVM运行时数据区所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。