`
ashnl007
  • 浏览: 14126 次
  • 性别: Icon_minigender_1
  • 来自: 江西南昌
社区版块
存档分类
最新评论

Java虚拟机运行时数据区

    博客分类:
  • JVM
阅读更多

        最近在看《深入理解Java虚拟机》,想把书中比较重要的知识码下来,留着备用加深理解。

 

        JVM在执行Java程序的过程中会将所管理的内存划分为若干个不同的数据区域,根据《Java虚拟机规范(Java SE 7版)》的规定,包括以下几个运行时数据区域。


 
 

  1. 程序计数器:可以当作是当前线程所执行的字节码的行号指示器,字节码解释器通过改变程序计数器来选取下一条需要执行的字节码指令,如:分支、循环、跳转、异常处理、线程恢复等。Java的多线程是通过时间片轮转来实现的,即处理器在任何一个确定的时刻都只会执行一条线程的指令。因此为了线程切换后能恢复到正确的执行位置,每个线程都有一个独立的程序计数器。如果线程执行的是Java方法,那么程序计数器记录的是当前虚拟机执行字节码指令的地址;如果线程执行的是Native方法,那么程序计数器为空。此内存区域是唯一一个在Java虚拟机规范中没有规定任何OutOfMemoryError情况的区域。
  2. Java虚拟机栈:Java虚拟机栈也是线程私有的,生命周期和线程一致。虚拟机栈是描述Java方法执行的内存模型:每个方法在执行同时都会创建一个栈帧(栈帧也叫过程活动记录,是编译器用来实现过程/函数调用的一种数据结构。)用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用开始到介绍都对应一个栈帧在虚拟机栈中的入栈到出栈的过程。局部变量表所需的内存空间在编译期间就已经确定了(完成分配了),运行期不能修改大小。当线程请求的栈深度大于虚拟机栈深度,将抛出StackOverflowError,当虚拟机栈扩展时无法申请到足够的内存,将抛出OutOfMemoryError。
  3. 本地方法栈:与Java虚拟机栈类似,Java虚拟机栈服务于Java方法,本地方法栈是服务于Native栈(有的虚拟机将二者合二为一:Sun HotSpot虚拟机)。
  4. Java堆:被所有线程共享的一块内存区域。它在虚拟机启动时创建,用于存放对象实例,是垃圾收集管理的主要区域(“GC堆”)。可以使用JVM参数控制大小(-Xmx -Xms),如果堆中没有内存可以完成实例的分配(new对象的时候内存不足),并且堆无法拓展时,将抛出OutOfMemoryError。
  5. 方法区:被所有线程共享的一块内存区域。它用于存储已被JVM加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。当方法区无法满足内存分配的需求时,将抛出OutOfMemoryError。
  6. 运行时常量池:String常量池这个概念经常会在面试中提到。常量池用于存放编译期生成的各种字面量和符号引用,这些内容在类加载后存放于方法区的运行时常量池。程序运行期间也能将数据放入常量池中(如:String的intern方法)。当常量池无法申请到内存时,将抛出OutOfMemoryError。
  7. 直接内存:服务器物理内存(通过Native方法分配的堆外内存,不受JVM控制的内存),扩展时内存不足将抛出OutOfMemoryError。
  • 大小: 50.9 KB
分享到:
评论

相关推荐

    java虚拟机运行时数据区分析

    Java虚拟机运行时数据区分析 Java虚拟机(JVM)是一种抽象的计算机,它提供了一个运行Java字节码的环境。JVM将Java源代码编译为字节码,并在运行时执行这些字节码。为了更好地理解JVM的工作原理,我们需要了解JVM的...

    Java虚拟机运行机制

    Java虚拟机运行机制 Java虚拟机(JVM)是一种用于计算设备的规范,可以用不同的方式(软件或硬件)加以实现。JVM包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。 Java虚拟机是一个...

    java虚拟机JVM详解ppt

    #### 四、Java虚拟机运行时数据区 根据《Java虚拟机规范》,Java虚拟机在运行时会使用到多个类型的内存区域,这些区域根据其性质的不同,可以划分为全局共享或线程私有。 ##### 4.1 程序计数器(Program Counter ...

    深入java虚拟机.pdf

    Java 虚拟机的体系结构由多个子系统组成,包括类加载器子系统、执行引擎、数据区等。类加载器子系统负责加载程序中的类型(类和接口),并赋予唯一的名字。执行引擎负责执行被加载类中包含的指令。数据区中保存了...

    Java虚拟机(Java VM) msjavax86 微软java虚拟机

    Java虚拟机的内部结构包括类装载器、运行时数据区、执行引擎、本地方法接口和本地库。其中,类装载器负责加载类文件,运行时数据区存储线程的工作数据,执行引擎解析并执行字节码,本地方法接口允许JVM调用非Java...

    Java虚拟机规范 JavaSE7

    JVM规范定义了JVM的结构、指令集和运行时数据区,以及如何执行指令和处理异常。自1999年以来,JVM规范经历了多次更新,而在2011年发布的JavaSE7版则带来了新的变化。 《Java虚拟机规范(JavaSE7版)》为想要了解...

    Java虚拟机规范中文版.pdf

    在JVM中,最核心的概念之一是堆(Heap),它是运行时数据区的一部分,用来存储对象的实例。此外,JVM还定义了方法区(Method Area),用于存储已被虚拟机加载的类信息、常量、静态变量等数据。还有栈(Stack),用于...

    Java虚拟机运行时数据区域汇总

    JVM的运行时数据区是程序运行时存储数据的地方,包括程序计数器、Java虚拟机栈、本地方法栈、Java堆以及方法区。以下是这些区域的详细介绍以及它们的特性。 程序计数器是JVM内存模型中的一小块区域,它可以看作是...

    Java虚拟机规范.Java SE 8版

    第2章概述Java虚拟机的整体架构,包括class文件格式、数据类型、原始类型、引用类型、运行时数据区、栈帧、浮点算法、异常等,这对理解本书后面的内容有重要帮助;第3章详述如何将Java语言编写的程序转换为Java...

    java虚拟机

    JVM通过类加载器将这些字节码加载到内存中,进行验证、准备、解析和初始化等步骤,形成运行时的数据区。 2. **运行时数据区**:包括堆内存、方法区、虚拟机栈、本地方法栈和程序计数器。堆是所有对象实例的存储区域...

    Java虚拟机规范.Java SE 8版.zip

    第2章概述Java虚拟机的整体架构,包括class文件格式、数据类型、原始类型、引用类型、运行时数据区、栈帧、浮点算法、异常等,这对理解本书后面的内容有重要帮助;第3章详述如何将Java语言编写的程序转换为Java...

    Java虚拟机规范中文版

    《Java虚拟机规范》是Java技术的核心文档之一,它详细描述了Java虚拟机(JVM)的行为,包括其内部结构、数据类型、执行模型、指令集、运行时数据区、垃圾回收机制和安全管理等内容。该规范是Java平台实现的基石,对...

    03 运行时数据区概述及线程.pptx

    03 JVM 运行时数据区概述及线程的 PPT 重绘。讲述 Java 虚拟机 运行时数据区所处位置,结构划分,以及各个区域与线程的关系。

    Java运行原理与Java虚拟机.pdf

    ### Java运行原理与Java虚拟机 #### 一、Java运行原理概述 Java作为一种跨平台的编程语言,其独特之处在于它的编译和解释过程。Java程序的执行涉及到两个主要步骤:首先是编译阶段,其次是解释执行阶段。 1. **...

Global site tag (gtag.js) - Google Analytics