Java在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途、创建和销毁的时间,有一些是随虚拟机的启动而创建,随虚拟机的退出而销毁,有些则是与线程一一对应,随线程的开始和结束而创建和销毁。
Java虚拟机运行时包含以下几个运行时数据区:
程序计数器
程序计数器是线程私有的,在线程创建时创建。可以看作是当前线程所执行的字节码的行号指示器(指向下一条需要执行的字节码指令)。
Java虚拟机栈
Java虚拟机栈是线程私有的,随线程的开始和结束而创建和销毁。Java虚拟机栈描述的是 Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至执行完成的过程,就相当于一个栈帧在Java虚拟机栈中入栈到出栈的过程。
本地方法栈
本地方法栈是线程私有的,和Java虚拟机栈作用类似,Java虚拟机栈为虚拟机执行Java方法服务,而本地方法栈为虚拟机执行Native方法服务。
Java堆
Java堆是可供各个线程共享的运行时内存区域,是供所有类实例和数组对象分配内存的区域。Java堆在虚拟机启动时被创建,存储了垃圾收集器(GC)管理的各种对象,这些对象无法显式销毁。
堆内存可以细分为新生代和老年代,其中新生代再细致一点可分为Eden空间、S0空间(From Survivor)、S1空间(To Survivor)。可以通过-Xmx和-Xms控制堆内存大小。
方法区
方法区是各个线程共享的内存区域,用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码数据等,例如:运行时常量池、字段和方法数据、构造函数和普通方法的字节码,还包括一些在类、实例、接口初始化时用到的特殊方法。
其中运行时常量池包含下面几种类型:
- CONSTANT_Utf8:UTF-8编码的Unicode字符串,tag为1
- CONSTANT_Integer:int类型的字面值,tag为3
- CONSTANT_Float:float类型的字面值,tag为4
- CONSTANT_Long:long类型的字面值,tag为5
- CONSTANT_Double:double类型的字面值,tag为6
- CONSTANT_Class:对一个类或接口的符号引用,tag为7
- CONSTANT_String:String类型字面值的引用,tag为8
- CONSTANT_Fieldref:对一个字段的符号引用,tag为9
- CONSTANT_Methodref:对一个类中方法的符号引用,tag为10
- CONSTANT_InterfaceMethodref:对一个接口中方法的符号引用,tag为11
- CONSTANT_NameAndType:对一个字段或方法的部分符号引用,tag为12
- ......(新版本添加了其他一些类型)
相关推荐
#### 二、JVM基本结构 JVM主要由以下三个子系统构成: 1. **类加载子系统**:负责将Java类加载到JVM中,并进行解析和初始化。 2. **运行时数据区**:即通常所说的JVM内存结构,包括方法区、堆、栈、本地方法栈和...
JVM 内存结构和 6 大区域 JVM 是 Java虚拟机,它是 Java 语言的核心组件之一,为 Java 程序提供了运行环境。JVM 的内存结构是 Java 程序的基础,它的设计和实现对 Java 程序的性能和可靠性产生了深远的影响。 JVM ...
### JVM基本原理及结构详解 #### 一、Java虚拟机(JVM)的逻辑与物理结构 JVM,即Java Virtual Machine,是运行Java字节码的虚拟机环境,它的设计目的是为了提供一个独立于硬件的运行环境,使得Java程序可以在任何...
**JVM内存基本结构** Java虚拟机(JVM)是Java程序运行的平台,它提供了内存管理、类加载、字节码执行等核心功能。JVM的内存结构主要分为以下几个区域: 1. **堆(Heap)**:这是JVM中最大的一块内存区域,用于...
**JVM体系结构与GC调优** Java虚拟机(JVM)是Java应用程序的核心组成部分,它为Java程序提供了一个运行时环境。理解JVM的体系结构对于优化Java应用的性能至关重要,尤其是垃圾收集(Garbage Collection, GC)的...
总的来说,《深入JVM内核—原理、诊断与优化》涵盖了从JVM基本结构到复杂优化策略的广泛主题。通过学习这本书,读者不仅可以提升对JVM内部运作的理解,还能掌握在实际开发中解决性能问题和优化应用的实用技巧。无论...
1. **JVM基本结构**: - 类加载器:负责查找并加载类文件,通常包括Bootstrap ClassLoader、Extension ClassLoader和App ClassLoader。 - 方法区:存储类的信息,如常量池、字段和方法数据等。 - 堆内存:存放...
本文将深入探讨JVM的基本结构、执行流程,以及Java 7的新特性。 首先,JVM由Java API和JRE组成,其中JVM的主要职责是通过类加载器(Class Loader)加载Java程序,并根据Java API来执行这些程序。JVM的设计是基于栈...
Java虚拟机(JVM)是Java程序运行的核心,它的内存结构对于理解和优化Java应用程序的性能至关重要。本笔记将深入探讨JVM内存的各个区域及其作用,帮助开发者掌握JVM内存管理的基本概念。 首先,JVM内存主要分为以下...
JVM 内部结构大解密 在 Java 虚拟机(JVM)中,数据类型可以分为两类:基本类型和引用类型。基本类型的变量保存原始值,即:他代表的值就是数值本身;而引用类型的变量保存引用值。“引用值”代表了某个对象的引用...
JVM的基本概念包括一套字节码指令集,该指令集为Java虚拟机定义了操作的最小单位;一组寄存器,用于存储字节码执行过程中的相关信息;一个栈,用于存放方法调用的参数、局部变量等;一个垃圾回收机制,用于自动管理...
JVM的指令集包括控制指令、数据处理指令、类型转换指令、异常处理指令等,涵盖了基本的数据运算和流程控制功能。 #### 堆管理与垃圾回收 堆是JVM中最活跃的内存区域,负责对象的动态分配。为了防止内存泄漏,JVM...
在JDK8中,JVM内存结构发生了显著变化,尤其是元空间(MetaSpace)替代了永久代(Permanent Generation)作为方法区的一部分。这种方法区的调整是由于永久代存在的一些问题,比如大小设定困难,容易引发溢出,以及给...
这些寄存器构成了 JVM 的基本 CPU 架构,用于支持字节码指令的执行。 ##### 2.3 JVM 的堆栈结构 堆栈结构是 JVM 中重要的内存管理组件之一。它主要用于存储方法调用过程中的局部变量、操作数栈等数据。每个线程在...
JVM内存管理主要包括内存结构、内存分配以及垃圾回收(GC)等方面。了解这些知识对于优化Java应用程序的性能至关重要。 ### 1. JVM内存结构 #### 1.1.1 JVM内存概述 JVM内存分为几个关键区域,每个区域都有特定的...
JVM的学习可以从其基本结构、代码编译和执行过程,以及内存管理和垃圾回收机制三个方面进行深入探讨。 首先,JVM的基本结构分为逻辑结构和物理结构。逻辑结构主要包括Java源码编译器、JVM执行引擎、类加载器等组件...
理解JVM内存结构对于优化Java应用的性能至关重要。 1. **方法区**: - 方法区是JVM内存中的一个重要区域,它存储了已经被加载的类信息,包括常量、静态变量以及即时编译器(JIT)编译后的代码。所有线程共享此区域...
#### 二、JVM基本结构 JVM主要包括以下几个部分: 1. **类加载器(ClassLoader)**:负责读取Java类文件(.class),将它们转换为可执行的字节码。 2. **内存空间(Memory Space)**: - **方法区(Method Area)**:存储每...
在本课程中个,将详细介绍JVM的基本原理、组成以及工作方式,并配合实际案例,介绍相关的调优技巧。 课程大纲: 第一课 初识JVM JVM分类 Java语言规范 JVM规范 介绍JVM的基本知识和发展历史,并介绍了Java语言...
JVM的基本结构 JVM由多个子系统和组件构成: - **类加载子系统**:负责加载类文件到JVM。 - **执行引擎**:执行字节码。 - **运行时数据区**:存储类的实例、方法数据、程序计数器等信息。 - **本地接口**:与操作...