`
touchinsert
  • 浏览: 1329231 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

JVM之数据区结构

阅读更多

1PC寄存器

每个线程有一个PC寄存器,如果不是Native,则PC寄存器包含当前正在执行的Java虚拟机指令的地址,如果是Native则不定义。

2Stack

线程私有,与线程同时创建的Java Stack。一个JVM Stack保存多个FrameFrame用来保存局部变量,部分结果,和方法返回值。Stack不一定是连续分配在内存中的。

Stack相关的异常有

1固定大小的StackStackOverflowError

2 动态大小的StackOutOfMemoryError

3Heap

JVM有一个所有线程共享的HeapHeap保存类的实例和数组。存储在Heap里的内容由GC回收。Heap可以使动态的也可以是固定大小的。它不一定是连续分配在内存中的。

Heap相关的异常有OutOfMemoryError

4.方法区

JVM有一个所有线程共享的方法区。方法区类似于UNIXtext segment。它用来保存常数池,Field,方法数据,已经方法的代码,构造函数(包括类实例化和接口初始化时的特殊方法,<init><cinit>)。方法区可以是固定的,也可以使动态的。虽然方法区是Heap的一部分,但是可以选择不被GC回收或者被压缩。它不一定是连续分配在内存中的。

与方法区相关的异常有OutOfMemoryError

<init>表示构造函数,<cinit>表示不带参数并且是静态的类或者接口的初始化方法。

5.运行期常数池

加载到内存中的Class文件内常数池Table就是运行期常数池。它包括各种常数,符号,和方法,域的引用。运行期常数池分配在方法区里。当JVM创建类或接口时,该类或接口的常数池也会加载到内存中。

与常数池相关的异常有OutOfMemoryError

6Native方法Stack

JVM可以使用C Stacks支持Native方法。Native方法是非Java语言实现的方法。Native方法Stack也可以用在用C语言或者其他语言实现JVM指令集解释器上。如果不能使用Native方法或者不依赖于C StacksJVM不用提供Native方法Stack

Native方法Stack在每个线程创建时被线程分配。它可以是固定大小,也可以是动态的。

Native方法Stack相关的异常有

1固定大小的StackStackOverflowError

2 动态大小的StackOutOfMemoryError

6Frames(翻译成框架可不好)

一个Frame用来保存数据和部分结果。他也用来执行动态链接,返回方法值和调度异常。

每次方法被调用的时候会创建一个新Frame。当方法调用结束时,FrameDestroyFrameJVM 线程Stack的一部分。每个Frame有它自己的本地变量数组,操作数Stack和一个当前方法的运行期常数池的引用(指针)。

本地变量数组的大小和操作数Stack的大小取决于编译期间与方法代码。在一个线程内,只能有一个FrameActive状态,这个Frame所关联的方法一定是在运行中,这个Frame叫做当前Frame,它所在的方法叫做当前方法,所在的类叫当前类。

如果当前方法调用另一个方法,或者当前方法结束,这当前Frame停止。

Frame不能被其他线程访问。

6.1 本地变量

每个Frame有一个本地变量数组。大小取决于方法的代码。一个变量保存一个boolean, byte, char, short, int, float, 引用,或者返回地址的值。2个变量可以保存一个long 或者double值。

JVM使用本地变量传递方法调用的参数。

6.2 操作数Stack

每个Frame保存一个 LIFO Stack作为操作数Stack。当Frame建立的时候操作数Stack为空。JVM提供指令加载本地变量中的常量或值到操作数Stack。然后从操作数Stack中取值,计算,返回结果到操作数Stack。操作数Stack也用来准备传给方法的参数和接受方法的返回结果。

6.3 动态链接

每个Frame包含一个当前方法运行期常数池的引用。该引用为了支持方法代码的动态链接。一个方法是通过符号引用来调用其他方法和方法变量的。动态链接将这些符号引用翻译为具体的方法引用(地址)。动态链接将加载所需的类解析尚未定义的符号。

分享到:
评论

相关推荐

    全面了解JVM组成底层工作原理以及数据结构

    JVM(Java虚拟机)是Java平台的核心组件之一,它为Java程序提供了一个独立于硬件平台的运行环境。JVM的主要任务是解释字节码,将其转换为对应平台的机器码执行。在深入探讨JVM之前,让我们先了解一下它的几个重要...

    JVM,数据结构,多线程,集合思维导图(JVM)

    这是Java学习过程中整理搜集的关于JVM,多线程,数据结构,集合的思维导图,能够有效的进行系统的学习

    jvm的基本原理及结构

    JVM的逻辑结构主要包括类加载系统、运行时数据区、执行引擎、本地接口等部分,这些构成了Java平台的核心。 - **类加载系统**:负责将.class文件中的二进制数据读入到内存中,进行字节码解析和动态链接,最终生成可...

    JVM,数据结构,多线程,集合思维导图(数据结构)

    这是Java学习过程中整理搜集的关于JVM,多线程,数据结构,集合的思维导图,能够有效的进行系统的学习

    JVM内存结构.pdf

    2. **运行时数据区**:即通常所说的JVM内存结构,包括方法区、堆、栈、本地方法栈和程序计数器。 3. **执行引擎**:解释或编译Java字节码并执行。 #### 三、运行时数据区详解 ##### 1. 方法区(Method Area) - **...

    jvm、数据结构与算法、数据库、redis的笔记

    在IT领域,深入理解JVM(Java虚拟机)、数据结构与算法、数据库以及Redis这四个主题对于提升软件开发效率和优化系统性能至关重要。下面将详细阐述这些知识点。 首先,JVM(Java虚拟机)是Java程序运行的基础。它...

    解析JVM内存结构和6大区域

    JVM 的内存结构可以分为 6 个区域:PC 寄存器、JVM 栈、堆(Heap)、方法区、运行时常量池和直接内存。每个区域都有其特定的功能和作用,以下是对每个区域的详细介绍: PC 寄存器(PC Register) PC 寄存器是一块...

    小菜鸟系列-JVM体系结构

    2. **运行时数据区(Runtime Data Area)** JVM内存分为多个区域,包括方法区、堆、虚拟机栈、本地方法栈和程序计数器。 - **方法区**:存储类信息、常量、静态变量等,Java 8后引入了元空间(Metaspace)取代了...

    JVM,数据结构,多线程,集合思维导图(多线程)

    这是Java学习过程中整理搜集的关于JVM,多线程,数据结构,集合的思维导图,能够有效的进行系统的学习

    JVM运行时数据区

    - **功能介绍**:栈是一种后进先出(LIFO)的数据结构,每个线程在其生命周期中都有一个独立的栈,用来存储局部变量表、操作数栈、动态链接、方法出口等信息。栈帧是栈中的基本单位,每次方法调用时都会创建一个新的...

    Jvm性能优化-JVM内存结构原理分析03

    Jvm内存结构主要分为五部分:堆、虚拟机栈、本地方法栈、程序计数器和方法区。 堆是Jvm中最大的内存区域,所有线程共享的,主要用来存储对象。堆可以分为年轻代和老年代两块区域。年轻代又可以分为一个Eden区和两个...

    JVM体系结构与GC调优

    JVM的主要组成部分包括类加载器、运行时数据区、执行引擎、本地方法接口和本地方法库。类加载器负责加载、验证和初始化类文件。运行时数据区包括堆、方法区、程序计数器、虚拟机栈和本地方法栈。堆是所有线程共享的...

    1.JVM与Java体系结构

    此外,还有方法区(或称为永久代)存放类的元数据,包括类信息、常量池等。Java的垃圾收集机制自动管理堆内存,通过不同类型的垃圾收集器来实现内存回收,如串行、并行、并发和G1垃圾收集器。 1.3 Java虚拟机的特性...

    JVM系统结构.docx

    Java虚拟机的体系结构包括多个组件和数据区。类装载子系统负责加载指定名称的类或接口,而运行引擎执行加载的类或接口中的指令。JVM的运行时数据区由以下几个部分组成: 1. 方法区(Method Area):存储类信息、...

    JVM与Java体系结构.pdf

    1. **JVM架构**:JVM分为多个组件,包括类加载器、运行时数据区、执行引擎、本地方法接口(JNI)和垃圾收集器(GC)。类加载器负责加载类文件,运行时数据区存储程序运行时的各种数据,执行引擎包含解释器和Just-In-...

    jvm内存基本结构及垃圾回收

    **JVM内存基本结构** Java虚拟机(JVM)是Java程序运行的平台,它提供了内存管理、类加载、字节码执行等核心功能。JVM的内存结构主要分为以下几个区域: 1. **堆(Heap)**:这是JVM中最大的一块内存区域,用于...

    JVM,多线程,数据结构,集合的思维导图(集合)

    这是Java学习过程中整理搜集的关于JVM,多线程,数据结构,集合的思维导图,能够有效的进行系统的学习

    JVM系列-第1章-JVM与Java体系结构

    Java 语言是我们编写程序的语言,它提供了基本的语法结构和数据类型。Java 虚拟机是运行 Java 程序的虚拟机,它提供了一个平台无关的环境,使得 Java 程序可以在不同的操作系统上运行。Java 库类是 Java 语言提供的...

Global site tag (gtag.js) - Google Analytics