Java中运行时内存结构
1.1 方法区:
方法区是系统分配的一个内存逻辑区域,是JVM在装载类文件时,用于存储类型信息的(类的描述信息)。
方法区存放的信息包括:
1.1.1类的基本信息:
- 每个类的全限定名
- 每个类的直接超类的全限定名(可约束类型转换)
- 该类是类还是接口
- 该类型的访问修饰符
- 直接超接口的全限定名的有序列表
1.1.2已装载类的详细信息:
-
运行时常量池:
在方法区中,每个类型都对应一个常量池,存放该类型所用到的所有常量,常量池中存储了诸如文字字符串、final变量值、类名和方法名常量。它们以数组形式通过索引被访问,是外部调用与类联系及类型对象化的桥梁。(存的可能是个普通的字符串,然后经过常量池解析,则变成指向某个类的引用)
-
字段信息:
字段信息存放类中声明的每一个字段的信息,包括字段的名、类型、修饰符。
字段名称指的是类或接口的实例变量或类变量,字段的描述符是一个指示字段的类型的字符串,如private A a=null;则a为字段名,A为描述符,private为修饰符
-
方法信息:
类中声明的每一个方法的信息,包括方法名、返回值类型、参数类型、修饰符、异常、方法的字节码。
(在编译的时候,就已经将方法的局部变量、操作数栈大小等确定并存放在字节码中,在装载的时候,随着类一起装入方法区。)
-
静态变量:
这个没什么好说的,就是类变量,类的所有实例都共享,我们只需知道,在方法区有个静态区,静态区专门存放静态变量和静态块。
- 到类classloader的引用:到该类的类装载器的引用。
- 到类class的引用:虚拟机为每一个被装载的类型创建一个class实例,用来代表这个被装载的类。
1.2 Java栈
JVM栈是程序运行时单位,决定了程序如何执行,或者说数据如何处理。
在Java中,一个线程就会有一个线程的JVM栈与之对应,因为不过的线程执行逻辑显然不同,因此都需要一个独立的JVM栈来存放该线程的执行逻辑。
对方法的调用:
Java栈内存,以帧的形式存放本地方法的调用状态,包括方法调用的参数、局部变量、中间结果等(方法都是以方法帧的形式存放在方法区的),每调用一个方法就将对应该方法的方法帧压入Java栈,成为当前方法帧。当调用结束(返回)时,就弹出该帧。
这意味着:
在方法中定义的一些基本类型的变量和引用变量都在方法的栈内存中分配。当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后(方法执行完成后),Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作它用。--------同时,因为变量被释放,该变量对应的对象,也就失去了引用,也就变成了可以被gc对象回收的垃圾。
相关推荐
Java内存结构和数据类型是Java编程的基础,理解它们对于编写高效、无错的代码至关重要。在Java中,内存主要分为两种区域:堆内存(Heap)和栈内存(Stack)。此外,还有方法区(Method Area)、程序计数器(PC ...
Java 内存结构备忘录 Java 内存结构是一个复杂的系统,包括堆内存模型、垃圾回收算法和处理内存泄露的最佳方案。Java 虚拟机(JVM)中存在 PermGen(内存永久保存区域), PermGen 中存储了常量池、字段与方法数据...
### Java内存结构详解 #### 一、概述 Java内存模型主要分为以下几个部分:堆(Heap)、栈(Stack)、方法区(Method Area)、程序计数器(Program Counter Register)以及本地方法栈(Native Method Stack)。本文...
Java把内存分成:栈内存,堆内存,方法区,本地方法区和寄存器等。 下面分别介绍栈内存,堆内存,方法区各自一些特性: 1、栈内存 (1)一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。 ...
#### 二、Java内存结构概述 Java程序在运行时,其内存空间被划分为多个不同的区域,以满足不同的数据管理和计算需求。下面详细介绍这些内存区域: 1. **程序计数器(Program Counter Register)** - **定义**:这是...
【JAVA内存结构】 Java内存结构主要分为五个主要区域:堆(JAVA HEAP)、虚拟机栈(JAVA VIRTUAL MACHINE STACKS)、本地方法栈(NATIVE METHOD STACK)、方法区(METHOD AREA)和程序计数器(RUNTIME CONSTANT ...
Java虚拟机(JVM)内存结构是理解Java应用程序性能优化的关键。在Java中,内存主要分为堆、方法区(在Java 8及以后版本中称为元空间)、栈、本地方法栈和程序计数器(PC寄存器)五个区域。 1. **堆**:线程共享的...
java jvm内存结构 调优
Java内存模型定义了线程如何访问和修改共享变量,确保多线程环境下的正确性。它涉及到 volatile、synchronized、final 等关键字的语义。 理解并掌握JVM内存结构有助于我们编写高效、稳定的Java代码,避免出现性能...
1、Java虚拟机内存结构模型 Java虚拟机内存结构分:JVM堆、方法区、虚拟机栈、本地方法栈、程序计数器。 JVM堆:所有线程共享的运行时内存区域,是GC回收的主场所,Java堆保存Java的实例对象,从内存回收对象的存活...
1. **内存层次结构**:Java 内存模型将内存分为堆内存、栈内存、方法区(在 Java 8 及以后版本中被元空间替代)和程序计数器等几个区域,其中堆存储对象实例,栈存储局部变量,方法区存储类信息,程序计数器则用于...
了解JVM的内存结构和管理机制对于优化Java应用程序的性能、避免内存泄漏和溢出问题至关重要。开发者应当根据实际应用的需求和资源限制,合理设置JVM参数,并运用适当的内存分析工具进行监控和调试。
Java内存管理是Java编程中至关重要的一部分,它涉及到Java虚拟机(JVM)如何有效地分配和管理内存资源,确保程序高效运行并防止内存泄漏。本文将详细阐述Java内存管理的主要组成部分:方法区、堆、栈和程序计数器。 1...
java虚拟机的内存结构,关于内存的相关介绍等,想要了解更多JVM的
3. **JVM内存结构与堆转储** JVM内存分为堆(Heap)、非堆(Non-Heap)和本地内存(Native Memory)。堆分为年轻代(Young Generation)、老年代(Tenured Generation)和持久代(PermGen,JDK 8以后被元空间取代)...
了解Java内存结构以及如何避免内存溢出至关重要。 Java内存主要分为以下几个区域: 1. **程序计数器**:这是一个非常小的内存区域,用于存储当前线程执行的字节码的行号指示器,用于确定下一条需要执行的指令。...