`

JAVA内存结构

JVM 
阅读更多

     常常提到JAVA内存,都会想起“堆”与“栈”。对JAVA内存结构,并没有很详细的认识,现对JAVA内存结构的一些主要信息进行整理,以作备忘之用。

 

     JAVA内存结构,又称运行时数据区。JAVA虚拟机定义了若干种程序运行期间会使用到的运行时数据区。其中一些会随着虚拟机的启动而创建,随着虚拟机的退出而销毁。另一些与线程一一对应,随着线程的开始和结束而创建和销毁。

 

PC寄存器

    PC寄存器是每个JAVA虚拟机线程私有的。一个JAVA虚拟机线程只会执行一个方法的代码,这个正被线程执行的方法称为该线程的当前方法。如果该方法是native的,PC寄存器的值是undefined;如果这个方法不是native的,那么PC寄存器就保存JAVA虚拟机正在执行的字节码指令的地址。

 

JAVA虚拟机栈

    JAVA虚拟机栈是每个JAVA虚拟机线程私有的。它用于储存栈帧,在方法调用和返回结中扮演非常重要的角色。

    JAVA虚拟机规范允许JAVA虚拟机栈被实现成固定大小的或者是根据计算动态扩展和收缩的。

当分配的栈容量超过 Java 虚拟机栈允许的最大容量时,Java 虚拟机将会抛出一个StackOverflowError 异常。
当JAVA虚拟机栈可以动态扩展时,如果经过扩展仍无法申请足够内存或者创建新线程时无足够内存创建JAVA虚拟机栈,那么 Java 虚拟机将会抛出一 个 OutOfMemoryError异常。


JAVA堆

    JAVA堆在虚拟机启动时就被分配,它是各线程共享的运行时内存区域。JAVA堆的容量可以是固定大小的,也可以随着程序执行的需求动态扩展,并在不需要过多空间时自动收缩。所有类实例和数组对象将分配到该内存的区域。它储存的的各种对象,无法显示地销毁,统一由垃圾回收器进行管理。如果实际所需的堆超过了自动内存管理系统能提供的最大容量,那 Java 虚拟机将会抛出一个OutOfMemoryError 异常。

 

方法区

    方法区在虚拟机启动时就被分配,它是各线程共享的运行时内存区域,用于存储的是每个类的结构信息。如果方法区的内存空间不能满足内存分配请求,那 Java 虚拟机将抛出一个OutOfMemoryError 异常。


运行时常量池

    运行时常量池是每个类或者接口的常量池运行时的表现形式。每一个运行时常量池都分配在 Java 虚拟机的方法区之中,在类和接口被加载到虚拟机后,对应的运行时常量池就被创建出来。


本地方法栈

     如果JAVA虚拟机不支持native方法,就不需要支持本地方法栈,它在JVM的实现上并不是必须的。相反,如果支持native方法,那它会在线程创建时,按线程分配。

 

 

分享到:
评论

相关推荐

    Java内存结构

    "Java内存结构" Java内存结构是Java编程语言中的一种基本概念,它决定了Java程序的运行机制。Java内存结构可以分为六个部分:寄存器、栈、堆、静态存储、常量存储和非RAM存储。其中,堆和栈是Java程序运行时最重要...

    Java内存结构.pdf

    ### Java内存结构详解 #### 一、概述 Java内存模型主要分为以下几个部分:堆(Heap)、栈(Stack)、方法区(Method Area)、程序计数器(Program Counter Register)以及本地方法栈(Native Method Stack)。本文...

    Java 内存结构备忘录1

    Java 内存结构备忘录 Java 内存结构是一个复杂的系统,包括堆内存模型、垃圾回收算法和处理内存泄露的最佳方案。Java 虚拟机(JVM)中存在 PermGen(内存永久保存区域), PermGen 中存储了常量池、字段与方法数据...

    JAVA内存结构-GC-CLASSLOAD

    【JAVA内存结构】 Java内存结构主要分为五个主要区域:堆(JAVA HEAP)、虚拟机栈(JAVA VIRTUAL MACHINE STACKS)、本地方法栈(NATIVE METHOD STACK)、方法区(METHOD AREA)和程序计数器(RUNTIME CONSTANT ...

    Java内存结构和数据类型

    Java内存结构和数据类型是Java编程的基础,理解它们对于编写高效、无错的代码至关重要。在Java中,内存主要分为两种区域:堆内存(Heap)和栈内存(Stack)。此外,还有方法区(Method Area)、程序计数器(PC ...

    一套完整介绍java内存模型和内存结构的文档

    #### 二、Java内存结构概述 Java程序在运行时,其内存空间被划分为多个不同的区域,以满足不同的数据管理和计算需求。下面详细介绍这些内存区域: 1. **程序计数器(Program Counter Register)** - **定义**:这是...

    JAVA内存溢出详解.doc

    1. **Java内存结构** Java内存主要分为堆内存(Heap)和栈内存(Stack),堆是存储对象实例的主要区域,而栈主要用于存储基本类型和对象引用。除此之外,还有方法区(Method Area)、程序计数器(PC Register)和...

    JVM内存结构.zip

    Java内存模型定义了线程如何访问和修改共享变量,确保多线程环境下的正确性。它涉及到 volatile、synchronized、final 等关键字的语义。 理解并掌握JVM内存结构有助于我们编写高效、稳定的Java代码,避免出现性能...

    JAVA的内存结构Java系列2021.pdf

    在深入探讨Java内存结构前,需要明确的是Java虚拟机(JVM)内存模型是Java程序运行的基石。JVM运行Java程序时,会将其内存划分成若干个不同的数据区域,包括程序计数器、虚拟机栈、本地方法栈、堆以及方法区。 程序...

    JAVA内存分配

    #### 一、JAVA内存结构概述 Java程序在运行过程中涉及的内存主要包括以下几个部分: 1. **方法区(Method Area)** 2. **栈内存(Stack Memory)** 3. **堆内存(Heap Memory)** 4. **本地方法栈(Native Method ...

    JVM内存结构

    JVM内存结构的理解对于优化Java程序的性能至关重要。JVM内存主要分为以下几个区域: 1. **程序计数器(Program Counter Register)**:每个线程都有一个独立的程序计数器,用于存储当前线程正在执行的字节码指令...

    深入理解JVM内存结构及运行原理全套视频加资料

    2019最新深入理解JVM内存结构及运行原理(JVM调优)高级核心课程视频教程下载。JVM是Java知识体系中的重要部分,对JVM底层的了解是每一位Java程序员深入Java技术领域的重要因素。本课程试图通过简单易懂的方式,系统...

    Java内存与垃圾回收调优.docx

    本文将深入探讨Java内存结构、垃圾回收机制以及调优策略。 首先,Java内存主要分为堆内存和非堆内存。堆内存是Java程序的主要内存区域,负责存储对象实例。它被划分为新生代(Young Generation)和老年代(Old ...

    java内存机制及异常处理

    Java内存机制是Java虚拟机(JVM)的关键组成部分,它管理着程序运行时的数据存储。在Java中,内存主要分为以下几个区域: 1. **Heap(堆)**:这是Java中最主要的内存区域,用于存储所有的类实例和数组。当堆空间...

    黑马程序员 - Java基础教学 - 03 - 变量的作用域、for循环、break、continue、内存结构

    #### 五、Java内存结构解析 Java程序运行时,内存被划分为几个不同的区域,每个区域有不同的功能和管理机制。 **5.1 栈内存**:主要用于存储局部变量和方法调用的信息。当一个方法执行完毕,其局部变量所占用的栈...

    jProfiler7 java内存分析 linux版本

    本篇文章将详细探讨jProfiler7在Java内存分析上的核心功能、使用方法以及在Linux环境中的配置和应用。 1. **内存分析概述** - 内存分析是识别和解决Java应用程序中的内存泄漏、过度对象创建和内存消耗过高问题的...

    Java内存机制学习和使用

    ### Java内存机制学习和使用 #### 一、Java内存机制概览 Java内存管理是Java开发人员必须掌握的核心概念之一。良好的内存管理不仅能够提升应用性能,还能避免常见的内存泄漏问题。本文旨在深入探讨Java内存机制,...

    Java虚拟机 JVM 内存结构介绍

    Java虚拟机(JVM)内存结构是理解Java应用程序性能和内存管理的关键。本文将详细介绍JVM内存的不同组件,包括它们的功能和重要性。 首先,Java虚拟机规范中的内存管理主要涉及Runtime Data Area,这是一个用于存储...

Global site tag (gtag.js) - Google Analytics