JVM笔记五-堆区
在JVM中,堆区是重中之重。通过前面文章的学习,我们知道了,栈区是不会有垃圾回收的,所以,经常说的垃圾回收,其实就是回收的是堆区的数据。在这里,我们将会看到传说中的,新生代、老年代、永久代(元空间)。凯哥Java(kaigejava)欢迎大家一起学习。
堆(Heap):
一个JVM实例只存在一个堆内存,堆内存的大小是可以调节的。类加载器读取了类文件后,需要把类、方法、常变量放到堆内存中,保存所有引用类型的真实信息,以方便执行器执行,堆内存分为三个部分:
堆内存分区:
Young Generation Space 新生区 Young/New
Tenure generation space 老年代 Old/Tenure
Permanent space 永久区/元空间 Perm
Java 7之前的堆内存示意图:
简版流程:
新生区是类的诞生、成长、消亡的区域,一个类在这里产生、应用,最后被垃圾回收器收集,结束生命。
新生区又分为两部分:伊甸园区(Eden space)和幸存者区(Survivor space)。所有的类都是在伊甸园区被new出来的。
幸存区有两个:0区(Survivor 0 space)和1区(Survivor 1 space).
当伊甸园区的空间用完时候,程序又需要创建对象,JVM的垃圾回收器将对伊甸园区进行垃圾回收(Minor GC,也叫轻GC 或者是YGC),将伊甸园区中的不再被其他对象所引用的对象进行销毁。然后伊甸园中的剩余对象移动到幸存0区(也叫from区)。若幸存0区也满了,再对该地区进行垃圾回收,然后移动到1区(也叫to区)。
如果1区也满了怎么办呢?在经历了15次YGC后,幸存1区也满了,那么这个时候,JVM将会把这些数据移动到养老区。如果养老区也满了,这个时候就会进行MajorGC(也称Full GC 检查FGC)。执行full GC对养老区的内存进行清理。如果养老区执行了Full GC之后,发现依然无法进行对象的保存,这个时候就会出现OOM(OutOfMemoryError)异常了。
如果出现了java.lang.OutOfMemoryError:java heap space异常。说明Java虚拟机的堆内存不够用了。主要原因有以下两种:
1:java虚拟机的堆内存设置不够,可以通过参数-Xms、-Xmx来调整
2:代码中创建了大量的大对象,并且长时间不能被垃圾回收器回收的(内存地址被引用了)
当你的才华撑不起你的野心的时候,你就应该静下心来学习;
当你的能力还驾驭不了你的目标时,就应该沉下心来,历练;
梦想,不是浮躁,而是沉淀和积累,只有拼出来的美丽,没有等出来的辉煌,机会永远是留给最渴望的那个人,学会与内心深处的你对话,问问自己,想要怎样的人生,静下心来学习,耐心沉淀,送给自己,共勉!
相关推荐
《JVM调优笔记》 Java虚拟机(JVM)是Java编程语言的核心组成部分,它负责执行字节码,管理内存,以及优化程序性能。JVM调优是提高Java应用程序性能的关键步骤,涉及到多个方面,包括堆内存设置、垃圾收集器选择、...
通过观看"jvm视频",你可以直观地了解这些概念,并通过"jvm笔记"加深理解和记忆。理论学习后,实践操作是巩固知识的关键,尝试在实际项目中应用这些知识,解决性能问题,优化JVM配置,将使你对JVM的理解更加深入。
在Java中,JVM也需要管理虚拟内存,包括堆内存(用于对象和数组)、栈内存(用于方法调用)以及方法区(存储类信息)。堆内存是JVM内存管理的主要部分,它在所有线程之间共享,而栈内存则为每个线程单独分配。虚拟机...
《JVM笔记(阳哥)》是一份深入探讨Java虚拟机(JVM)的资料,由阳哥精心整理。这份笔记涵盖了JVM的基础概念、内存管理、类加载机制、性能优化等多个方面,对于理解Java程序的运行机制以及提升开发效率具有重要的...
### 马士兵JVM调优笔记知识点梳理 #### 一、Java内存结构 Java程序运行时,其内存被划分为几个不同的区域,包括堆内存(Heap)、方法区(Method Area)、栈(Stack)、程序计数器(Program Counter Register)以及...
为了更好地理解和掌握JVM内部的工作机制,本篇文章将重点介绍JVM中的几个关键内存区域:程序计数器、Java虚拟机栈、本地方法栈、堆以及方法区。 #### 二、程序计数器(Program Counter Register) 程序计数器是一块...
这份资料出自B站上的【狂神说Java】系列教程,为快速入门JVM提供了详实的笔记。以下是根据这些资源可能包含的一些关键知识点的详细解析: 1. **JVM概述**: - JVM是Java平台的核心组成部分,它是一个运行Java字节...
### JVM学习笔记(一) #### 一、JVM概述与工具使用 JVM(Java Virtual Machine)是Java语言的核心组成部分之一,它为Java程序提供了一个跨平台的运行环境。本篇学习笔记主要介绍如何利用一系列工具来查看和监控JVM...
【标题】"ImagesForJVM-JVM笔记图片" 提供的是一系列关于Java虚拟机(JVM)的图像资料,这些图片通常用于辅助理解和学习JVM的工作原理。JVM是Java程序运行的基础,它负责解释执行Java字节码,使得Java能够实现跨平台...
本笔记是马老师的 JVM 调优实战笔记,涵盖了 JVM 的概述、内存结构、堆内存、垃圾回收算法、JVM 参数等方面的内容。 JVM 调优目录 JVM 调优是 JavaVirtual Machine(Java 虚拟机)的优化过程,目的是为了提高 Java...
3. 内存模型:JVM内存包括堆、栈、方法区、本地方法栈和程序计数器等,理解这些区域的作用和垃圾回收机制是优化JVM的关键。 四、JVM在Kafka中的优化 1. 参数调优:根据Kafka的特性,调整JVM内存大小、GC策略、并发...
2. 运行时数据区:包括方法区(Method Area)、虚拟机栈(JVM Stack)、本地方法栈(Native Method Stack)、程序计数器(PC Register)和堆(Heap)。每个线程有自己的虚拟机栈和程序计数器,而方法区和堆则是所有...
2. **堆(Heap)**:所有对象实例和数组都存储在这里,是JVM中最大的一块内存区域,被所有线程共享。 3. **栈(Stack)**:每个线程都有一个独立的栈,用于存储局部变量表、操作数栈、动态链接和方法出口等信息。 4....
### JVM学习笔记 #### JVM内存模型 (JMM) JVM内存模型主要分为以下几个部分: - **Java堆**:这是所有线程共享的一块区域,在虚拟机启动时创建。主要用于存放对象实例,几乎所有的对象实例都在这里分配内存。 - *...
jvm笔记 1、jvm总体架构.pdf 2、堆内存内部结构.pdf 3、有关内存的常用配置参数.pdf 4、有关内存溢出和内存泄漏的知识点.pdf 5、jvm里的垃圾回收机制.pdf 6、jvm优化知识点升级和配置总结.pdf 7、Tomcat调优...
逻辑结构主要包括Java源码编译器、JVM执行引擎、类加载器等组件,而物理结构则涵盖了堆、栈、本地方法栈、方法区等内存区域。JDK与JRE的区别在于,JDK包含了开发工具和JRE,而JRE仅包含运行时环境。 Java代码的编译...
**JVM学习笔记(Java虚拟机)** Java虚拟机(JVM)是Java语言的核心组成部分,它是Java程序运行的平台,负责解释和执行字节码。深入理解JVM对于优化Java应用程序性能至关重要。本笔记将从以下几个方面详细介绍JVM:...
JVM的类加载过程包括加载、验证、准备、解析和初始化五个阶段。加载是找到.class文件并读入内存;验证确保字节码的正确性,防止恶意代码;准备阶段为静态变量分配内存,并设置默认初始值;解析将符号引用转换为直接...
本篇JVM学习笔记主要涵盖了以下几个核心知识点: 1. **运行时数据区**: - **程序计数器**:记录当前线程执行的字节码的行号,用于线程恢复执行时跳转到正确位置。 - **Java虚拟机栈**:每个方法执行时创建的栈帧...
JVM(Java虚拟机)内存模型主要由以下几个部分组成:程序计数器、Java虚拟机栈、本地方法栈、Java堆以及方法区(在JDK 8之后称为元空间)。下面将对这几个部分进行详细介绍。 #### 二、程序计数器 程序计数器是一...