1.JVM的内存管理。
JVM的结构图如下:
从上图可以看到,JVM管理的内存区域主要分为以下几部分:
1、程序计数器(Program Counter Register):占用较小的内存空间,是当前线程执行的字节码的行号指示器。每个线程都会有独立的程序计数器。存放的是字节码指令的地址。
2、Java虚拟机栈(JVM Stacks):线程私有、生命周期与线程相同。主要作用是描述JAVA方法执行的过程:方法被执行时会创建一个栈帧(stack frame),用于存放方法执行时的局部变量、操作栈、动态链接、方法出口等信息。方法从调用到执行完成的过程,就是一个栈帧在虚拟机栈的入栈、出栈过程。
3、本地方法栈(Native Method Stack):作用与虚拟机栈类似,区别在于用于执行本地方法。
4、Java 堆(Heap):虚拟机管理内存最大的一块,被所有线程共享,存放对象实例。垃圾收集器主要管理JAVA 堆。
5、方法区域(Method Area):所有线程共享;用于存储虚拟机加载的类信息、常量、静态变量、即时编译器编译的代码等。这个区域的数据是比较固定的,可认为是"永久代"(Permanent Generation)。
6、运行时常量池(Runtime Constant Pool):方法区的一部分。用于存放编译期生成的各种字面量和符号引用。
2.对象访问
看一下简单的对象创建语句:
Object obj = new Object();
“Object obj”语句将会反映到JAVA栈的本地变量表中,作为一个reference的类型出现,存放地址。
“new Object()”语句将会反映到JAVA堆中,形成一块存储了Object类型的所有数据值的结构化内存。另外,这条语句还必须包含能找到此对象类型数据(如对象类型、父类、接口、方法等)的地址信息;这些地址信息的真正存储区域是方法区。
reference类型存放的方式,主要分为两种:
1、句柄访问方式:JAVA堆中划分出一块内存用来存放句柄池,reference中存储的是句柄的地址,而句柄中存储了对象实例数据和类型数据各自的地址。如下图所示:
2、直接指针访问方式:采用这种方式,在JAVA堆布局中就必须放置访问类型数据的相关信息,reference中直接存储的就是对象地址。如下图:
相关推荐
本篇JVM学习笔记主要关注对象声明、相关内存分配方法以及虚拟内存的物理和虚拟寻址概念。 首先,我们来看对象声明。在Java中,对象是在堆上创建的。例如,`CHeapObj` 类展示了如何在C++中模拟Java对象在堆上的分配...
JVM性学习笔记-基本原理,内存模型,JVM参数设置,类加载器原理,JDK自带工具
### JVM学习笔记(一) #### 一、JVM概述与工具使用 JVM(Java Virtual Machine)是Java语言的核心组成部分之一,它为Java程序提供了一个跨平台的运行环境。本篇学习笔记主要介绍如何利用一系列工具来查看和监控JVM...
### JVM学习笔记 #### JVM内存模型 (JMM) JVM内存模型主要分为以下几个部分: - **Java堆**:这是所有线程共享的一块区域,在虚拟机启动时创建。主要用于存放对象实例,几乎所有的对象实例都在这里分配内存。 - *...
本文将深入探讨JVM中的访问控制器,主要基于“java之jvm学习笔记十一(访问控制器)-源码”这一主题,以及相关的源码分析。 首先,我们得了解Java的安全模型。Java安全模型基于一种称为安全管理器(SecurityManager)...
本篇JVM学习笔记主要涵盖了以下几个核心知识点: 1. **运行时数据区**: - **程序计数器**:记录当前线程执行的字节码的行号,用于线程恢复执行时跳转到正确位置。 - **Java虚拟机栈**:每个方法执行时创建的栈帧...
这个“java之jvm学习笔记五(实践写自己的类装载器)”很可能是对这一主题的详细探讨。 类装载器在Java中的主要职责是动态加载类到JVM中。Java的类装载器分为三个基本层次:启动类装载器(Bootstrap ClassLoader)、...
**JVM学习笔记(Java虚拟机)** Java虚拟机(JVM)是Java语言的核心组成部分,它是Java程序运行的平台,负责解释和执行字节码。深入理解JVM对于优化Java应用程序性能至关重要。本笔记将从以下几个方面详细介绍JVM:...
JVM的学习可以从其基本结构、代码编译和执行过程,以及内存管理和垃圾回收机制三个方面进行深入探讨。 首先,JVM的基本结构分为逻辑结构和物理结构。逻辑结构主要包括Java源码编译器、JVM执行引擎、类加载器等组件...
在JVM的学习中,理解其内存模型、垃圾收集算法以及类加载机制至关重要。 1. **JVM内存模型** - **方法区**:也称为“永久代”,存储虚拟机加载的类信息、常量、静态变量等,是线程共享的区域。在Java 8之后,这...
"jvm视频及笔记"这个资源显然是一份全面学习JVM的材料,结合了视频教程和书面笔记,帮助学习者深入理解JVM的工作原理及其在实际开发中的应用。 JVM的学习可以从以下几个重要的知识点开始: 1. **JVM架构**:JVM...
JVM学习笔记(缓慢更新).md
这个资料包不仅涵盖了理论知识,还包含个人的学习笔记,对于学习和掌握JVM的各个方面都将大有裨益。无论是初学者还是经验丰富的开发者,都可以从中找到提升自己技能的宝贵资源。通过深入学习和实践,可以更好地理解...
虚拟机学习笔记 Java 虚拟机(JVM)是 Java 语言的 runtime 环境,负责加载、验证、执行 Java 字节码。以下是 JVM 相关知识点的总结。 1. 运行时数据区域 JVM 的运行时数据区域主要包括: * 堆(Heap):...
### JVM中篇笔记知识点 #### 一、Class 文件结构 ##### 1. 概述 - **字节码文件的跨平台性** - Java 的跨平台性体现在 "Write Once, Run Anywhere" (WORA),即一次编写,到处运行。Java 语言编写的源代码在编译...
Java虚拟机(JVM)是Java程序运行的基础,它是一个抽象的计算机系统,负责执行Java字节码。本文将深入探讨JVM的工作...这本《JVM工作原理学习笔记》应包含了这些内容的详细讲解,对于学习和提升JVM相关知识极具价值。
《JVM内存管理学习笔记》 在Java世界中,JVM(Java Virtual Machine)是运行所有Java应用程序的核心。深入理解JVM内存管理对于优化程序性能、预防和解决内存泄漏问题至关重要。本文将从JVM内存模型、内存区域划分、...
【狂神说JVM探究】是一份集合了多种格式的学习资料,主要涵盖了Java虚拟机(JVM)的基础知识。这份资料出自B站上的【狂神说Java】系列教程,为快速入门JVM提供了详实的笔记。以下是根据这些资源可能包含的一些关键...
此外,JVM还有一块特殊的内存区域——方法区,用于存储类的信息,如类的静态变量和常量池等。理解这些内存区域的划分和工作方式,对于优化内存使用和避免内存泄漏至关重要。 三、类加载机制 JVM的类加载机制包括...