`

JVM内存结构系列:HotSpot内存结构最清晰

    博客分类:
  • JAVA
 
阅读更多

SUN的jvm内存池被划分为以下几个部分:
Eden Space (heap)
内存最初从这个线程池分配给大部分对象。
Survivor Space (heap)
用于保存在eden space内存池中经过垃圾回收后没有被回收的对象。
Tenured Generation (heap)
用于保持已经在survivor space内存池中存在了一段时间的对象。
Permanent Generation (non-heap)
保存虚拟机自己的静态(reflective)数据,例如类(class)和方法(method)对象。Java虚拟机共享这些类数据。这个区域被分割为只读的和只写的。
Code Cache (non-heap)
HotSpot Java虚拟机包括一个用于编译和保存本地代码(native code)的内存,叫做“代码缓存区”(code cache)。
jvm的内存回收过程是这样的:
对象在Eden Space创建,当Eden Space满了的时候,gc就把所有在Eden Space中的对象扫描一次,把所有有效的对象复制到第一个Survivor Space,同时把无效的对象所占用的空间释放。当Eden Space再次变满了的时候,就启动移动程序把Eden Space中有效的对象复制到第二个Survivor Space,同时,也将第一个Survivor Space中的有效对象复制到第二个Survivor Space。如果填充到第二个Survivor Space中的有效对象被第一个Survivor Space或Eden Space中的对象引用,那么这些对象就是长期存在的,此时这些对象将被复制到Permanent Generation。

若垃圾收集器依据这种小幅度的调整收集不能腾出足够的空间,就会运行Full GC,此时jvm gc停止所有在堆中运行的线程并执行清除动作

 

 

HotSpot 虚拟机定义两个Generation:Young Generation (有时候也称为Nursery)和Old Generation。Young Generation由一个Eden Space和两个Survivor Spaces组成,虚拟机初始是分配所有的对象到Eden Space,许多对象也是在这里死去。当它执行一个minor GC的时候,虚拟机将从Eden Space中移动一些残余的对象到其中的一个Survivor Spaces中。虚拟机将在Survivor Spaces中生存足够长时间的对象移动到Old Generation的Tenured Spaces中。当Tenured Generation被填满,则将执行一个完全GC,这个完全GC非常的慢,因为它要处理所有存活着的对象。Permanent Generation 控制着所有虚拟机自己映射的数据,如类和对象的方法。

 

 

VM内存划分为年轻代(Young)和年老代(Tenured),Young GC是指是针对年轻代中的无用对象进行垃圾回收,而Full GC则会对年轻代和年老代中的无用对象均进行垃圾回收。上图中Virtual为可伸缩部分,即初始可以指定一个内存空间最大值和初始值,随着程序运行空间会进行增长。

Young:年轻代,具体包括EdenSurvivor0Survivor1

Eden:初始分配的对象最先存放到这里;

Survivor0Survivor1:存放Eden中经过若干次Young GC仍存活的对象,Survivor0Survivor1轮流被使用,当GC执行时,会从其中一个空间中拷贝存活对象到另一空间中。

Tenured:存放Survivor1中经过若干次Young GC仍存活的对象,这里的对象只有Full GC才可能回收;

 

Perm:存放Java类,常量等静态内容。

 

分享到:
评论

相关推荐

    JVM内存配置优化

    在进行JVM内存配置优化之前,我们需要了解Java虚拟机(JVM)的内存结构。Java的逻辑内存模型大致分为几个部分: 1. **堆内存(Heap)**:主要用于存储对象实例、数组等引用类型的数据。在Java中使用`new`关键字创建的...

    JVM 内存结构及配置总结

    Java虚拟机(JVM)内存结构与配置是Java开发者必须理解的重要概念,它涉及到程序的运行效率和稳定性。本文将详细解析JVM的内存结构、内存分配策略以及相关的配置参数。 1. **JVM内存结构** JVM内存主要分为以下几...

    JVM内存结构.pdf

    ### JVM内存结构详解 #### 一、概述 Java虚拟机(JVM)作为Java程序的运行环境,其核心组件之一便是内存管理系统。理解JVM的内存布局对于开发高性能的应用程序至关重要。本文将详细介绍JVM内存结构及其各个组成部分...

    解析JVM内存结构和6大区域

    JVM 内存结构和 6 大区域 JVM 是 Java虚拟机,它是 Java 语言的核心组件之一,为 Java 程序提供了运行环境。JVM 的内存结构是 Java 程序的基础,它的设计和实现对 Java 程序的性能和可靠性产生了深远的影响。 JVM ...

    JVM自动内存管理:内存区域基础概念

    同时,理解JVM内存结构有助于分析内存泄漏问题,通过监控堆和栈的使用情况,可以找出可能的内存占用过高的原因。 总之,掌握JVM内存管理的基本概念,可以帮助开发者更好地理解和解决Java应用程序在运行时遇到的性能...

    JVM面试资料:JVM结构、JVM调优、四大垃圾回收算法、七大垃圾回收器

    JVM结构:类加载器,执行引擎,本地方法接口,本地内存结构; 四大垃圾回收算法:复制算法、标记-清除算法、标记-整理算法、分代收集算法 七大垃圾回收器:Serial、Serial Old、ParNew、CMS、Parallel、Parallel Old...

    Jvm性能优化-JVM内存结构原理分析03

    "Jvm性能优化-JVM内存结构原理分析03" Jvm性能优化是Java虚拟机(JVM)中非常重要的一部分,它对Jvm的性能产生了很大的影响。本文将从Jvm内存结构的角度来分析Jvm性能优化的原理。 Jvm内存结构主要分为五部分:堆...

    JVM内存溢出问题解析

    JVM 内存溢出问题解析 JVM 内存溢出是指程序运行所需的内存大于虚拟机能提供的最大内存的情况。这种情况可能是由于数据量过大、死循环、静态变量和静态方法过多、递归、无法确定是否被引用的对象等原因引起的。同时...

    JVM内存结构.zip

    JVM内存结构的理解对于优化Java程序性能、避免内存溢出等问题至关重要。以下是对JVM内存结构的详细阐述: 1. **堆内存(Heap)** 堆内存是Java程序中最大的一块内存区域,用于存储对象实例。所有通过`new`关键字...

    linux & JVM内存结构分析

    本文将深入探讨Linux内存结构和JVM内存模型,以及如何通过提供的文件来分析它们。 首先,让我们了解Linux内存结构。Linux内存主要分为以下几个部分: 1. **物理内存**:这是计算机硬件中的RAM,用于存储正在运行的...

    jvm 内存分析文档

    JVM内存管理主要包括内存结构、内存分配以及垃圾回收(GC)等方面。了解这些知识对于优化Java应用程序的性能至关重要。 ### 1. JVM内存结构 #### 1.1.1 JVM内存概述 JVM内存分为几个关键区域,每个区域都有特定的...

    JVM内存模型深度剖析与优化.pdf

    本文将深入剖析JVM内存模型的结构和工作机理,并讨论如何优化JVM参数以提高Java应用程序的性能。 一、JVM内存模型结构 JVM内存模型主要分为以下几个部分: 1. 程序计数器(PC Register):存储当前线程执行的字节...

    JVM内存参数详解以及配置调优

    在这个资源中,我们将详细讨论 JVM 内存参数的配置和调优,包括 JVM 的结构、内存管理、垃圾回收、堆和非堆内存、内存分配和限制等方面。 JVM 结构 JVM 的结构主要由六个部分组成:JVM API、JVM 内部组件、平台...

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

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

    idea插件JVM内存工具JProfiler11

    5. **JVM配置调整**:JProfiler11还可以提供JVM参数建议,帮助开发者正确设置JVM初始堆大小、最大堆大小、内存池等关键参数,确保应用程序稳定运行。 在实际使用中,JProfiler11的详细报告和可视化界面使得问题定位...

    JVM内存管理白皮书

    此外,文档的结构化布局使得内容条理清晰,即使是初学者也能够逐步建立起对JVM内存管理的全面认识。通过这份白皮书的学习,读者将能够深入理解JVM内存管理的复杂性,并掌握处理内存问题的有效方法。

    jvm内存基本结构及垃圾回收

    **JVM内存基本结构** Java虚拟机(JVM)是Java程序运行的平台,它提供了内存管理、类加载、字节码执行等核心功能。JVM的内存结构主要分为以下几个区域: 1. **堆(Heap)**:这是JVM中最大的一块内存区域,用于...

    JVM内存空间分配笔记

    ### JVM内存空间分配详解 #### 一、JVM内存模型概览 JVM(Java虚拟机)内存模型主要由以下几个部分组成:程序计数器、Java虚拟机栈、本地方法栈、Java堆以及方法区(在JDK 8之后称为元空间)。下面将对这几个部分...

    jvm的内存结构图的ppt模型分析.zip

    Java虚拟机(JVM)是Java程序运行的基础,它的内存结构是理解Java应用程序性能和内存管理的关键。在“jvm的内存结构图的ppt模型分析”中,我们将深入探讨JVM内存的不同区域及其功能。 首先,JVM内存可以分为堆内存...

    JVM内存日志

    本文将深入探讨JVM内存结构、`jmap`工具的使用以及如何分析`dump.txt`文件中的内存日志。 1. JVM内存结构: - **堆内存**:这是JVM最大的内存区域,用于存储对象实例。堆内存分为新生代(Young Generation)、老...

Global site tag (gtag.js) - Google Analytics