资讯专栏INFORMATION COLUMN

JVM运行时数据区

wuyangnju / 1013人阅读

摘要:虚拟机执行程序时,会把虚拟机管理的内存划分成不同的区域,用于处理程序运行过程中不同的数据。各个线程之间的程序计数器互不影响,独立存储。虚拟机栈线程私有每个方法在执行时都会创建一个栈帧。

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

程序计数器 线程私有

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

内存空间小

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

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

如果执行的是Native方法,程序计数器记录的值为空

没有OutOfMemoryError情况

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

虚拟机栈 线程私有

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

StackOverflowError异常

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

OutOfMemoryError异常

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

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

通常是虚拟机管理的最大的一块区域

被所有线程共享

垃圾收集器管理的主要区域

OutOfMemoryError异常

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

方法区

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/69021.html

相关文章

  • 对于JVM,你就只知道堆和栈吗?

    摘要:下面的截图内容来自从规范我们可以看到,规范要求的运行时数据区域有程序计数器虚拟机栈堆方法区本地方法栈运行时常量池这及部分。查了一下,还是没有查到官方对于运行时数据区域的说明,但是许多博客都指出将字符串常量池移动到了堆中。 不少java程序员一提JVM运行时数据区域,就会说堆和栈,当然也有java程序员给出方法区、虚拟机栈、本地方法栈、堆、程序计数器这个答案,但是还有人给出永久代、虚拟机...

    王笑朝 评论0 收藏0
  • 【译】JVM框架说明

    摘要:框架说明开发者都知道会执行字节码。但是可能大多数人都不知道一个事实是的实现,它分析字节码,解释并执行代码。执行引擎字节码加载到运行时数据区后,会被执行引擎执行。解释器更快的解释字节码,但是执行非常慢。垃圾收集收集并移除不再被使用的对象。 JVM框架说明 java开发者都知道JRE(Java Runtime Environment)会执行字节码。但是可能大多数人都不知道一个事实:JRE是...

    tracymac7 评论0 收藏0
  • 一文了解JVM

    摘要:而使用虚拟机是实现这一特点的关键。每个字节码指令都由一个字节的操作码和附加的操作数组成。字节码可以通过以下两种方式转换成合适的语言解释器一条一条地读取,解释并执行字节码执行,所以它可以很快地解释字节码,但是执行起来会比较慢。 一、什么是JVM JVM是Java Virtual Machine(Java 虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实...

    whatsns 评论0 收藏0
  • Java GC

    摘要:对字节码文件进行解释执行,把字节码翻译成相关平台上的机器指令。使用命令可对字节码文件以及配置文件进行打包可对一个由多个字节码文件和配置文件等资源文件构成的项目进行打包。和不存在永久代这种说法。 Java技术体系 从广义上讲,Clojure、JRuby、Groovy等运行于Java虚拟机上的语言及其相关的程序都属于Java技术体系中的一员。如果仅从传统意义上来看,Sun官方所定义的Jav...

    justCoding 评论0 收藏0
  • 万万没想到,JVM内存结构的面试题可以问的这么难?

    摘要:方法区在实际内存空间站可以是不连续的。这一规定,可以说是给了虚拟机厂商很大的自由。但是值得注意的是,堆其实还未每一个线程单独分配了一块空间,这部分空间在分配时是线程独享的,在使用时是线程共享的。 在我的博客中,之前有很多文章介绍过JVM内存结构,相信很多看多我文章的朋友对这部分知识都有一定的了解了。 那么,请大家尝试着回答一下以下问题: 1、JVM管理的内存结构是怎样的? 2、不同的...

    CloudwiseAPM 评论0 收藏0
  • Java程序员:不识Jvm真面目,只缘身在增删查改中

    摘要:编译器只需面向,生成能理解的代码或字节码文件。源文件经编译器,编译成字节码程序,通过将每一条指令翻译成不同平台机器码,通过特定平台运行。涨见识,字节码执行过程分析。解决办法减少默认栈的容量来换取更多的线程支持。 前言 JVM是java的核心和基础,在java编译器和os平台之间的虚拟处理器。它是一种基于下层的操作系统和硬件平台并利用软件方法来实现的抽象的计算机,可以在上面执行java的...

    or0fun 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<