1 JVM把管理的内存划分不同区域,一些区域随JVM启动而存在,一些区域依赖于用户线程的生命周期。
2 JVM管理的内存包括这几个区域:
程序计数器,Java虚拟机栈,本地方法栈。(线程单独使用)
Java堆,方法区,常量池,直接内存。(线程共享)
程序计数器
Program counter register
|
- 告诉JVM(?)当前线程下一条指令的地址
- 如果执行Native方法,则为空
- 此区域没有OutOfMemoryError,其他都有
|
虚拟机栈(JVM Stack) |
- 为JVM使用的java 字节码服务
- 方法在执行的时候创建一个stack frame 入栈,执行完后出。
- stack frame存储了局部变量表,操作栈,动态链接,方法出口等。
- 局部变量表的内存空间在编译时完成,运行时不会变化。
- 如果请求的栈大于允许的,stackoverflowerror.
- 如果JVM Stack动态扩展时,申请不到了,outofmemoryerror
|
本地方法栈(Native Method Stack) |
- 为JVM使用的native method服务
- 也会抛出outofmemoryerror和stackoverflowerror
|
java heap堆 |
- 所有线程共享,jvm启动时创建
- 存放对象实例
- GC管理的主要区域
- -Xms -Xmx调节大小
- 会抛出outofmemoryerror
|
java method area 方法区 |
- 存放被jvm加载的类 常量 静态变量 即时编译的代码
- 可以叫永久代
- 内存回收的对象是常量池的回收和类型的卸载。
- 方法区无法满足内存分配需求时,outofmemoryerror
- 包括运行时的常量池,存储符号引用和直接引用(一部分常量在编译时产生,如final String "abc",但是也可以动态产生,如intern()方法)
|
直接内存 |
- 不会受到java heap限制,但是受到物理内存和寻址空间的限制
- 如果sum(各个区域内存)>物理内存,outofmemoryerror
- 可以提高性能,避免java heap 和 native heap中来回复制数据(NIO 类的使用)
|
参考:
https://my.oschina.net/OutOfMemory/blog/299525
http://www.tuicool.com/articles/6vQ3am
http://chenzhou123520.iteye.com/blog/1585224
分享到:
相关推荐
Java虚拟机(JVM)作为Java程序的运行环境,定义了一系列用于程序执行过程中使用的数据区域。这些数据区域在JVM启动时创建,在JVM退出时销毁。其中一些数据区域是线程独立的,即每个线程都有自己的数据区域;而另...
- **寄存器**:虽然JVM在概念上有一组寄存器,但实际实现中通常使用栈来存储数据,因为寄存器模型在大多数硬件上难以实现。 - **栈**:每个线程都有自己的操作栈,用于存储方法调用和局部变量。 - **堆**:用于...
运行时数据区(也称为运行时内存区域)是程序运行期间的存储区域,包括程序计数器、虚拟机栈、本地方法栈、堆、方法区等。执行引擎将字节码转换成机器码执行。本地接口库则是提供Java与原生操作系统交互的接口。 2....
JVM的运行时数据区是指JVM在运行时使用的一些区域,用于存储被JVM自身或者在JVM上运行的程序所使用的数据。这些区域包括: 1. 方法区(Method Area):用于存储类信息、字段信息和方法信息的区域。 2. 堆(Heap):...
在深入了解JVM(Java虚拟机)的运行时数据区域之前,我们先简要回顾一下JVM的基本概念。JVM是一种能够执行字节码(Bytecode)的虚拟机,它为Java程序提供了运行环境,并负责处理诸如内存管理、异常处理、垃圾回收等...
JVM(Java Virtual Machine,Java虚拟机)是运行所有Java程序的假想计算机,是Java程序的运行环境,负责执行指令、管理数据、内存、寄存器等,是实现Java跨平台特性的关键部分。JVM指令手册详细记录了JVM的所有操作...
运行时数据区是 JVM 运行时的内存模型,它包括方法栈、PC 寄存器、本地方法栈、Java 堆、方法区和直接内存等部分。执行引擎负责读取运行时数据区的字节码,并逐个执行它们。 类加载器子系统是 JVM 的一个重要组成...
当Java程序运行时,JVM会将字节码解释成特定平台的机器指令,并执行这些指令。这种方式确保了Java程序的可移植性和跨平台性。 ##### 2. 谁需要了解Java虚拟机 - **Java开发者**:对于想要深入了解Java语言特性的...
2. 运行时数据区:JVM将内存分为不同的区域,如方法区(存储类信息)、堆(存放对象实例)、栈(存储方法调用)、程序计数器(记录下一条要执行的指令地址)和本地方法栈(服务本地方法,如JNI调用)。 3. 执行引擎...
2. **运行时数据区**:包含堆、栈、方法区、本地方法栈等,用于存储程序运行时的数据。 3. **执行引擎**:解释或编译字节码,执行程序指令。 4. **内存管理**:包括堆内存管理(用于动态对象分配)和栈内存管理...
Java虚拟机(JVM)是Java程序运行的核心,它负责解释和执行字节码,为Java应用程序提供了一个跨平台的运行环境。JDK(Java Development Kit)包含了开发和运行Java程序所需的所有工具,包括JVM。当我们谈论"jdk,jvm...
Java虚拟机(JVM)的核心组件之一便是其运行时数据区域,这一区域负责存储程序运行过程中产生的各种数据。为了更好地理解这部分内容,我们将深入探讨运行时数据区域内的各个组成部分。 ##### 1.1 PC 寄存器 (Program ...
Java虚拟机(JVM)是Java程序运行的基础,它是一个抽象的计算机系统,负责执行Java字节码。本文将深入探讨JVM的启动过程及其基本原理。 首先,我们需要理解JVM的基本概念。JVM是Java Virtual Machine的缩写,它是...
4. **运行时数据区**:JVM规范定义了程序计数器、虚拟机栈、本地方法栈、堆和方法区这五个主要的运行时数据区。每个线程都有自己的程序计数器、虚拟机栈和本地方法栈,而堆和方法区则是所有线程共享的。 5. **字节...
运行时常量池是方法区的一部分,它存放编译期生成的各种字面量和符号引用,并在类加载后被存放至方法区的运行时常量池中。运行时常量池具备动态性,可以在运行期间添加新的常量。 #### 堆(Heap) 堆是JVM中最大的...
JVM(Java Virtual Machine,Java虚拟机)是Java程序运行的基础,它负责将Java字节码转换为特定平台上的机器码,使得Java程序能够跨平台运行。JVM运行机制复杂且至关重要,涉及到内存分配、垃圾回收、类加载机制等多...
- **运行时数据区**:是JVM在运行期间,用于存储数据的内存区域,包括方法区、堆、虚拟机栈、本地方法栈和程序计数器。 #### 6. 内存模型中的重要概念 - **方法区**:存储已被虚拟机加载的类信息、常量、静态变量等...
它们在Class文件中存储了Java代码运行时所依赖的元数据,这使得JVM能够解析这些符号引用,完成类加载过程。 在基础篇中,我们还提到了其他语言是否可以使用JVM作为产品交付媒介。这个问题的答案是肯定的。以Groovy...