`
神仙公社
  • 浏览: 9002 次
社区版块
存档分类
最新评论

程序运行时数据在JVM中的存放

    博客分类:
  • JVM
JVM 
阅读更多

1 JVM把管理的内存划分不同区域,一些区域随JVM启动而存在,一些区域依赖于用户线程的生命周期。
2 JVM管理的内存包括这几个区域:

程序计数器,Java虚拟机栈,本地方法栈。(线程单独使用)

Java堆,方法区,常量池,直接内存。(线程共享)

 

程序计数器

Program counter register

  1. 告诉JVM(?)当前线程下一条指令的地址
  2. 如果执行Native方法,则为空
  3. 此区域没有OutOfMemoryError,其他都有

 

 虚拟机栈(JVM Stack)
  1. 为JVM使用的java 字节码服务
  2. 方法在执行的时候创建一个stack frame 入栈,执行完后出。
  3. stack frame存储了局部变量表,操作栈,动态链接,方法出口等。
  4. 局部变量表的内存空间在编译时完成,运行时不会变化。
  5. 如果请求的栈大于允许的,stackoverflowerror.
  6. 如果JVM Stack动态扩展时,申请不到了,outofmemoryerror

 

本地方法栈(Native Method Stack)
  1. 为JVM使用的native method服务
  2. 也会抛出outofmemoryerror和stackoverflowerror
java heap堆
  1. 所有线程共享,jvm启动时创建
  2. 存放对象实例
  3. GC管理的主要区域
  4. -Xms -Xmx调节大小
  5. 会抛出outofmemoryerror
java method area 方法区
  1. 存放被jvm加载的类 常量 静态变量 即时编译的代码
  2. 可以叫永久代
  3. 内存回收的对象是常量池的回收和类型的卸载。
  4. 方法区无法满足内存分配需求时,outofmemoryerror
  5. 包括运行时的常量池,存储符号引用和直接引用(一部分常量在编译时产生,如final String "abc",但是也可以动态产生,如intern()方法)
直接内存
  1. 不会受到java heap限制,但是受到物理内存和寻址空间的限制
  2. 如果sum(各个区域内存)>物理内存,outofmemoryerror
  3. 可以提高性能,避免java heap 和 native heap中来回复制数据(NIO 类的使用)

 

参考:

https://my.oschina.net/OutOfMemory/blog/299525

http://www.tuicool.com/articles/6vQ3am

http://chenzhou123520.iteye.com/blog/1585224

分享到:
评论

相关推荐

    JVM运行时数据区

    Java虚拟机(JVM)作为Java程序的运行环境,定义了一系列用于程序执行过程中使用的数据区域。这些数据区域在JVM启动时创建,在JVM退出时销毁。其中一些数据区域是线程独立的,即每个线程都有自己的数据区域;而另...

    JVM的运行机制

    - **寄存器**:虽然JVM在概念上有一组寄存器,但实际实现中通常使用栈来存储数据,因为寄存器模型在大多数硬件上难以实现。 - **栈**:每个线程都有自己的操作栈,用于存储方法调用和局部变量。 - **堆**:用于...

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

    运行时数据区(也称为运行时内存区域)是程序运行期间的存储区域,包括程序计数器、虚拟机栈、本地方法栈、堆、方法区等。执行引擎将字节码转换成机器码执行。本地接口库则是提供Java与原生操作系统交互的接口。 2....

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

    JVM的运行时数据区是指JVM在运行时使用的一些区域,用于存储被JVM自身或者在JVM上运行的程序所使用的数据。这些区域包括: 1. 方法区(Method Area):用于存储类信息、字段信息和方法信息的区域。 2. 堆(Heap):...

    运行时数据区域

    在深入了解JVM(Java虚拟机)的运行时数据区域之前,我们先简要回顾一下JVM的基本概念。JVM是一种能够执行字节码(Bytecode)的虚拟机,它为Java程序提供了运行环境,并负责处理诸如内存管理、异常处理、垃圾回收等...

    JVM中文指令手册.pdf

    JVM(Java Virtual Machine,Java虚拟机)是运行所有Java程序的假想计算机,是Java程序的运行环境,负责执行指令、管理数据、内存、寄存器等,是实现Java跨平台特性的关键部分。JVM指令手册详细记录了JVM的所有操作...

    浅谈jvm原理

    运行时数据区是 JVM 运行时的内存模型,它包括方法栈、PC 寄存器、本地方法栈、Java 堆、方法区和直接内存等部分。执行引擎负责读取运行时数据区的字节码,并逐个执行它们。 类加载器子系统是 JVM 的一个重要组成...

    jvm中文规范简介

    当Java程序运行时,JVM会将字节码解释成特定平台的机器指令,并执行这些指令。这种方式确保了Java程序的可移植性和跨平台性。 ##### 2. 谁需要了解Java虚拟机 - **Java开发者**:对于想要深入了解Java语言特性的...

    Java jvm虚拟机.zip

    2. 运行时数据区:JVM将内存分为不同的区域,如方法区(存储类信息)、堆(存放对象实例)、栈(存储方法调用)、程序计数器(记录下一条要执行的指令地址)和本地方法栈(服务本地方法,如JNI调用)。 3. 执行引擎...

    JVM运行程序虚拟机的详细介绍.docx

    2. **运行时数据区**:包含堆、栈、方法区、本地方法栈等,用于存储程序运行时的数据。 3. **执行引擎**:解释或编译字节码,执行程序指令。 4. **内存管理**:包括堆内存管理(用于动态对象分配)和栈内存管理...

    jdk,jvm源码

    Java虚拟机(JVM)是Java程序运行的核心,它负责解释和执行字节码,为Java应用程序提供了一个跨平台的运行环境。JDK(Java Development Kit)包含了开发和运行Java程序所需的所有工具,包括JVM。当我们谈论"jdk,jvm...

    JVM 运行时数据区域,垃圾回收机制,类加载机制三大功能详解.docx

    Java虚拟机(JVM)的核心组件之一便是其运行时数据区域,这一区域负责存储程序运行过程中产生的各种数据。为了更好地理解这部分内容,我们将深入探讨运行时数据区域内的各个组成部分。 ##### 1.1 PC 寄存器 (Program ...

    jvm 启动过程 JVM 原理

    Java虚拟机(JVM)是Java程序运行的基础,它是一个抽象的计算机系统,负责执行Java字节码。本文将深入探讨JVM的启动过程及其基本原理。 首先,我们需要理解JVM的基本概念。JVM是Java Virtual Machine的缩写,它是...

    深入JVM内核—原理、诊断与优化视频教程-2.JVM运行机制

    4. **运行时数据区**:JVM规范定义了程序计数器、虚拟机栈、本地方法栈、堆和方法区这五个主要的运行时数据区。每个线程都有自己的程序计数器、虚拟机栈和本地方法栈,而堆和方法区则是所有线程共享的。 5. **字节...

    JVM 完整深入解析.pdf

    运行时常量池是方法区的一部分,它存放编译期生成的各种字面量和符号引用,并在类加载后被存放至方法区的运行时常量池中。运行时常量池具备动态性,可以在运行期间添加新的常量。 #### 堆(Heap) 堆是JVM中最大的...

    JVM原理.pdf

    JVM(Java Virtual Machine,Java虚拟机)是Java程序运行的基础,它负责将Java字节码转换为特定平台上的机器码,使得Java程序能够跨平台运行。JVM运行机制复杂且至关重要,涉及到内存分配、垃圾回收、类加载机制等多...

    JVM必知必会

    - **运行时数据区**:是JVM在运行期间,用于存储数据的内存区域,包括方法区、堆、虚拟机栈、本地方法栈和程序计数器。 #### 6. 内存模型中的重要概念 - **方法区**:存储已被虚拟机加载的类信息、常量、静态变量等...

    JVM课件(云析学院JVM课程课件)

    它们在Class文件中存储了Java代码运行时所依赖的元数据,这使得JVM能够解析这些符号引用,完成类加载过程。 在基础篇中,我们还提到了其他语言是否可以使用JVM作为产品交付媒介。这个问题的答案是肯定的。以Groovy...

Global site tag (gtag.js) - Google Analytics