选自毕玄的<<分布式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对应的值
发表评论
-
JAVA一些用于作标志位的一些接口
2015-10-11 13:18 907Java 中 有很多接口内容为空的 ,基本上是用来做标 ... -
企业架构
2015-10-11 13:13 743企业架构 -
场景经验
2014-12-11 13:13 596锁链的使用场景: 游戏行业最简单的例子,A玩家,B玩 ... -
JVM优化
2014-12-11 13:12 764锁消除参数(需要加上逃逸分析来对变量作用域进行 ... -
BeanUtils.copyProperties VS PropertyUtils.copyProperties
2014-11-19 20:17 627BeanUtils.copyProperties VS ... -
JVM优化
2014-09-29 20:24 0锁削除参数(必须开启逃逸分析) -XX:+D ... -
ServerSocket backlog参数解析
2014-09-28 14:24 1080已经经过小弟的手动测试 转载(http://blog.csd ... -
锁粗化测试
2014-07-03 20:01 846锁粗化 可以用来 ... -
java虚拟机内存模型
2014-07-03 19:30 767... -
String.intern 在java 6,7 和8中的使用- 字符串常量池
2014-05-21 17:05 8951String.intern in Java 6, 7 ... -
基本类型转String 和字符串连接机制
2014-05-21 17:03 3245Primitive types to String conv ... -
spring的autowire详解
2013-11-24 23:09 2007spring 中 autowire 经常使 ... -
项目中总结一些小经验
2013-11-13 09:18 824最近接手别人的项目中,遇到了许多坑,故作了些 ... -
镜像队列阐述(翻译)
2013-07-27 08:26 748http://activemq.apache.org/mi ... -
如何定位java.lang.NoSuchMethodError
2012-12-15 21:55 1018在运行 ... -
like 查询注意事项
2012-04-22 17:35 972http://rdc.taobao.com/team/ ... -
hibernate
2012-04-18 13:57 794在hibernate中,用hql语句查询实体类,采用l ... -
正则表达式 贪婪与堕落
2012-03-09 11:24 823String str = "start [I ... -
jvm内存管理笔记一
2012-02-28 23:32 922节选自毕玄<<java分布式应用& ... -
解析xml乱码
2012-02-27 14:50 1824话说有一天,哥要解析XML,于是就百度COPY了一段代码 ...
相关推荐
### JVM内存空间分配详解 #### 一、JVM内存模型概览 JVM(Java虚拟机)内存模型主要由以下几个部分组成:程序计数器、Java虚拟机栈、本地方法栈、Java堆以及方法区(在JDK 8之后称为元空间)。下面将对这几个部分...
《JVM内存管理学习笔记》 在Java世界中,JVM(Java Virtual Machine)是运行所有Java应用程序的核心。深入理解JVM内存管理对于优化程序性能、预防和解决内存泄漏问题至关重要。本文将从JVM内存模型、内存区域划分、...
本笔记将深入探讨JVM内存的各个区域及其作用,帮助开发者掌握JVM内存管理的基本概念。 首先,JVM内存主要分为以下几个部分: 1. **堆(Heap)**:这是Java对象的主要存储区域,所有的类实例和数组都会被分配到堆中...
4. **垃圾收集**:JVM如何自动管理内存,理解不同垃圾收集器如Serial、Parallel、CMS、G1等的工作机制,以及新生代和老年代的概念。 5. **类加载器**:系统类加载器、扩展类加载器和应用程序类加载器之间的双亲委派...
### 马士兵JVM调优笔记知识点梳理 #### 一、Java内存结构 Java程序运行时,其内存被划分为几个不同的区域,包括堆...通过理解和掌握这些概念与技巧,可以帮助开发者更高效地管理和优化Java应用程序的内存使用情况。
#### JVM内存模型 (JMM) JVM内存模型主要分为以下几个部分: - **Java堆**:这是所有线程共享的一块区域,在虚拟机启动时创建。主要用于存放对象实例,几乎所有的对象实例都在这里分配内存。 - **直接内存**:这...
4. **堆**:所有对象实例和数组都在堆中分配内存,是所有线程共享的一块区域,通过垃圾收集器进行内存管理。 5. **方法区**:存储类和接口的信息,如常量池、字段和方法数据。在Java 8后被元空间(Metaspace)所取代...
本文档涉及Java虚拟机(JVM)的堆内存分配和管理,以及相关的JVM内存设置参数。堆内存是Java中用于存储对象实例的区域,它在JVM内存模型中占据核心位置。在深入理解堆内存结构及其设置参数之前,我们需要明确几个...
二、JVM内存回收机制 1. **堆内存**:所有对象都在堆内存中分配,包括实例变量和数组。Java的垃圾回收主要关注堆内存的管理。 2. **垃圾回收算法**: - **标记-清除(Mark-Sweep)**:首先标记出所有活动对象,...
1. **JVM内存模型** - **方法区**:也称为“永久代”,存储虚拟机加载的类信息、常量、静态变量等,是线程共享的区域。在Java 8之后,这部分被元空间(Metaspace)取代。 - **运行时常量池**:是方法区的一部分,...
二、内存管理 JVM内存主要分为堆内存和栈内存两大部分。堆内存主要存放对象实例,而栈内存则用于存储方法调用过程中的局部变量。此外,JVM还有一块特殊的内存区域——方法区,用于存储类的信息,如类的静态变量和...
4. 垃圾收集:JVM的自动内存管理关键在于垃圾收集,包括可达性分析、标记-清除、复制、标记-整理、分代收集等算法,以及新生代、老年代、永久代(或元空间)等区域划分。 5. 类型系统:JVM支持基本类型、引用类型...
本文将深入探讨JVM的工作原理,包括内存管理、类加载机制、垃圾回收以及性能优化等方面。 首先,我们来理解JVM的内存结构。在JVM中,内存被分为堆内存和栈内存两大部分。堆内存主要用于存储对象实例,而栈内存则...
垃圾回收是JVM内存管理的关键。它自动回收不再使用的对象,释放内存资源。新生代和旧生代采用不同的垃圾收集算法,例如Minor GC和Major GC,以确保高效且无内存泄漏的运行环境。通过调整JVM参数如-Xmx、-Xms、-Xmn等...
Java虚拟机(JVM)是Java程序的核心组成部分,它为Java...总的来说,理解JVM的工作原理、内存管理、性能优化以及其在跨平台和跨语言方面的角色,对于Java开发者来说至关重要,这有助于编写出更高效、稳定的应用程序。
Java虚拟机(JVM)作为Java程序的运行环境,负责管理和分配内存资源。为了更好地理解和掌握JVM内部的工作机制,本篇文章将重点介绍JVM中的几个关键内存区域:程序计数器、Java虚拟机栈、本地方法栈、堆以及方法区。 #...
【描述】:本笔记首先从宏观角度重新认识JVM,强调了JVM的物理结构,特别是内存管理部分。接着,重点讨论了GC优化,特别是如何理解和控制垃圾收集的时机。此外,还提到了通过调整JVM参数来获取和解析GC日志,以进行...
2. 运行时数据区:包括方法区(Method Area)、虚拟机栈(JVM Stack)、本地方法栈(Native Method Stack)、程序计数器(PC Register)和堆(Heap)。每个线程有自己的虚拟机栈和程序计数器,而方法区和堆则是所有...