`
ashnl007
  • 浏览: 13595 次
  • 性别: 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虚拟机规范.Java SE 8版

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

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

    主要给大家介绍了关于Java虚拟机运行时数据区域的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

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

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

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

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

    Java虚拟机规范(Java SE 7)中文版

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

    【带书签】Java虚拟机规范(Java SE 7).pdf

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

    java虚拟机规范 jdk8.

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

    深入Java虚拟机(原书第2版).pdf【附光盘内容】

     本书共分20章,第1-4章解释了java虚拟机的体系结构,包括java栈、堆、方法区、执行引擎等;第5-20章深入描述了java技术的内部细节,包括垃圾收集、java安全模型、java的连接模型和动态扩展机制、class文件、运算及...

    JAVA虚拟机.ppt

    定义 简介 特点 使用主题 安装方法 支持的数据类型 规格描述 JVM指令系统 JVM寄存器 JVM栈结构 JVM碎片回收堆 体系结构 8.1Java指令集 ... 8.5方法区 JVM的运行过程 Java虚拟机命令行参数说明 JVM存储区

    Java虚拟机规范 Java SE 8版

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

    Java7虚拟机规范(高清带目录)

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

    深入理解Java虚拟机精华知识点

    从架构角度来看,Java虚拟机主要包括类加载器、运行时数据区、执行引擎、垃圾收集器等部分。类加载器负责将字节码文件加载到内存中,运行时数据区用于存储程序执行时所需的数据,执行引擎则负责执行字节码文件,而...

    第二章Java虚拟机

    java体系结构,java虚拟机,虚拟机中的数据类型

    深入Java虚拟机

    2.3.4 非标准运行时库 2.3.5 对虚拟机的依赖 2.3.6 对用户界面的依赖 2.3.7 Java平台实现中的bug 2.3.8 测试 2.4 平台无关的七个步骤 2.5 平台无关性的策略 2.6 平台无关性和网络移动对象 2.7...

    JVM-Java虚拟机

    运行时数据区;对象的创建流程与内存分配; 对象内存布局;如何访问一个对象;GC基本原理;串行收集器;并行收集器; 能学到什么:1,JVM底层运行机制和原理;2JVM参数;3,垃圾回收原理;4,垃圾回收器的使用;5,...

    JAVA 运行环境安装包

    它包含了Java虚拟机(Java Virtual Machine,JVM),以及Java核心类库和运行时所需的其他组件。 JRE的主要作用是提供Java应用程序的运行时支持。当我们编写并编译Java代码后,生成的是字节码文件(.class文件)。而...

Global site tag (gtag.js) - Google Analytics