`
SilenceGG
  • 浏览: 109165 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

jvm内存管理笔记二

    博客分类:
  • JAVA
阅读更多

      选自毕玄的<<分布式java应用>>   

 

    堆:

      堆用于存储对象的实例及数组值,  可以认为java所有通过new创建的对象的内存都在Heap中进行分,Heap中对象所占用的内存由gc进行回收.大小可通过-Xms和-Xmx控制。  32位操作系统最大为2GB,64位无限制

   -Xms为jvm启动时申请的最小Heap内存,默认为物理内存的1/64,但小于1GB

   -Xmx为jvm可申请的最大Heap内存,默认为物理内存的1/4,但小于1GB,默认当空余堆内存小于40%时,jvm会增大Heap到

-Xmx指定的大小,当空余堆内存大于70%时,jvm会减小Heap到-Xms指定的大小

 

  为了让内存回收高效,sunjdk对堆采用分代管理的方式

 

 

 


注:(持久代在方法区中分配,请勿视)

 

 

  1.新生代(New Generation)

   大多数情况下,java程序中新建的对象都在新生代分配内存, 新生代由Eden Space和2块相同大小的Survivor Space(又为S0和S1或From和To)构成,

 

当Eden区满时,还存活的对象将被复制到Survivor区(两个中的一个),当这个Survivor区满时,此区的存活对象将被复制到另外一个Survivor区,当这个Survivor去也满了的时候,从第一个Survivor区复制过来的并且此时还存活的对象,将被复制“年老区(Tenured)”。需要注意,Survivor的两个区是对称的,没先后关系,所以同一个区中可能同时存在从Eden复制过来 对象,和从前一个Survivor复制过来的对象,而复制到年老区的只有从第一个Survivor去过来的对象。而且,Survivor区总有一个是空的。同时,根据程序需要,Survivor区是可以配置为多个的(多于两个),这样可以增加对象在年轻代中的存在时间,减少被放到年老代的可能<<红色部分 转自http://developer.51cto.com/art/201001/175883.htm>>

 

 

   通过-Xmn指定新生代大小, 通过-XX:SurvivorRation调整Eden Space和 Survivor Space的大小

 

 2.旧生代(Old Generation 或 Tenuring Generation)

    用于存放新生代中经过多次垃圾回收依然存放的对象,例如:缓存对象 

    新建的对象可能在旧生代上分配内存,主要有2种(由不同的GC实现来决定):

   1.大的数组对象,且数组中无引用对象

   2.大对象,可通过在启动参数上设置-XX:PrtenureSizeThreshold=1024(单位为字节,默认为0)来代表当对象超过多大时就不在新生代分配,在旧生代分配

 

  旧生代的值所占用内存的大小为-Xmx对应的值减去-Xmn对应的值

 

 

 

  • 大小: 24.5 KB
分享到:
评论

相关推荐

    JVM内存空间分配笔记

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

    JVM内存管理学习笔记

    《JVM内存管理学习笔记》 在Java世界中,JVM(Java Virtual Machine)是运行所有Java应用程序的核心。深入理解JVM内存管理对于优化程序性能、预防和解决内存泄漏问题至关重要。本文将从JVM内存模型、内存区域划分、...

    JVM内存结构笔记.rar

    本笔记将深入探讨JVM内存的各个区域及其作用,帮助开发者掌握JVM内存管理的基本概念。 首先,JVM内存主要分为以下几个部分: 1. **堆(Heap)**:这是Java对象的主要存储区域,所有的类实例和数组都会被分配到堆中...

    jvm视频及笔记

    4. **垃圾收集**:JVM如何自动管理内存,理解不同垃圾收集器如Serial、Parallel、CMS、G1等的工作机制,以及新生代和老年代的概念。 5. **类加载器**:系统类加载器、扩展类加载器和应用程序类加载器之间的双亲委派...

    马士兵jvm调优笔记.docx

    ### 马士兵JVM调优笔记知识点梳理 #### 一、Java内存结构 Java程序运行时,其内存被划分为几个不同的区域,包括堆...通过理解和掌握这些概念与技巧,可以帮助开发者更高效地管理和优化Java应用程序的内存使用情况。

    JVM学习笔记

    #### JVM内存模型 (JMM) JVM内存模型主要分为以下几个部分: - **Java堆**:这是所有线程共享的一块区域,在虚拟机启动时创建。主要用于存放对象实例,几乎所有的对象实例都在这里分配内存。 - **直接内存**:这...

    JVM历史发展和内存回收笔记.rar

    4. **堆**:所有对象实例和数组都在堆中分配内存,是所有线程共享的一块区域,通过垃圾收集器进行内存管理。 5. **方法区**:存储类和接口的信息,如常量池、字段和方法数据。在Java 8后被元空间(Metaspace)所取代...

    堆内存及JVM内存设置参数 小笔记

    本文档涉及Java虚拟机(JVM)的堆内存分配和管理,以及相关的JVM内存设置参数。堆内存是Java中用于存储对象实例的区域,它在JVM内存模型中占据核心位置。在深入理解堆内存结构及其设置参数之前,我们需要明确几个...

    JVM历史发展和内存回收笔记

    二、JVM内存回收机制 1. **堆内存**:所有对象都在堆内存中分配,包括实例变量和数组。Java的垃圾回收主要关注堆内存的管理。 2. **垃圾回收算法**: - **标记-清除(Mark-Sweep)**:首先标记出所有活动对象,...

    jvm学习笔记(jvm内存模型&垃圾收集算法&类加载机制)

    1. **JVM内存模型** - **方法区**:也称为“永久代”,存储虚拟机加载的类信息、常量、静态变量等,是线程共享的区域。在Java 8之后,这部分被元空间(Metaspace)取代。 - **运行时常量池**:是方法区的一部分,...

    JVM笔记(阳哥).zip

    二、内存管理 JVM内存主要分为堆内存和栈内存两大部分。堆内存主要存放对象实例,而栈内存则用于存储方法调用过程中的局部变量。此外,JVM还有一块特殊的内存区域——方法区,用于存储类的信息,如类的静态变量和...

    JVM学习资料+笔记

    4. 垃圾收集:JVM的自动内存管理关键在于垃圾收集,包括可达性分析、标记-清除、复制、标记-整理、分代收集等算法,以及新生代、老年代、永久代(或元空间)等区域划分。 5. 类型系统:JVM支持基本类型、引用类型...

    JVM工作原理学习笔记

    本文将深入探讨JVM的工作原理,包括内存管理、类加载机制、垃圾回收以及性能优化等方面。 首先,我们来理解JVM的内存结构。在JVM中,内存被分为堆内存和栈内存两大部分。堆内存主要用于存储对象实例,而栈内存则...

    jVM学习笔记.ppt

    垃圾回收是JVM内存管理的关键。它自动回收不再使用的对象,释放内存资源。新生代和旧生代采用不同的垃圾收集算法,例如Minor GC和Major GC,以确保高效且无内存泄漏的运行环境。通过调整JVM参数如-Xmx、-Xms、-Xmn等...

    笔记-JVM三期.pdf

    Java虚拟机(JVM)是Java程序的核心组成部分,它为Java...总的来说,理解JVM的工作原理、内存管理、性能优化以及其在跨平台和跨语言方面的角色,对于Java开发者来说至关重要,这有助于编写出更高效、稳定的应用程序。

    深入JVM笔记word版

    Java虚拟机(JVM)作为Java程序的运行环境,负责管理和分配内存资源。为了更好地理解和掌握JVM内部的工作机制,本篇文章将重点介绍JVM中的几个关键内存区域:程序计数器、Java虚拟机栈、本地方法栈、堆以及方法区。 #...

    6.1.5.JVM终结篇笔记1

    【描述】:本笔记首先从宏观角度重新认识JVM,强调了JVM的物理结构,特别是内存管理部分。接着,重点讨论了GC优化,特别是如何理解和控制垃圾收集的时机。此外,还提到了通过调整JVM参数来获取和解析GC日志,以进行...

    JVM笔记.docx

    2. 运行时数据区:包括方法区(Method Area)、虚拟机栈(JVM Stack)、本地方法栈(Native Method Stack)、程序计数器(PC Register)和堆(Heap)。每个线程有自己的虚拟机栈和程序计数器,而方法区和堆则是所有...

Global site tag (gtag.js) - Google Analytics