1 对象优先分配在Eden区

  对象优先在Eden进行分配,大多数情况下,对象在新生代Eden区进行分配。当Eden区没有足够的空间进行分配时,虚拟机会发起一次Minor GC。

  新生代GC(Ninor GC)指发生在新生代的垃圾收集动作,因为Java对象大多都具备朝生夕死的特征,因此Minor GC非常频繁,一般回收速度也比较快

    老年代GC(Major GC / Full GC)指发生在老年代的GC,出现在Major GC,经常会伴随至少一次的Minor GC。Major GC的速度一般会比Minor GC慢至少十倍。

2 大对象直接进入老年代

  所谓大对象是指需要大量连续内存的Java对象,最典型的大对象就是那种很长的字符串以及数组,因为出现大对象对于内存来说是一个很坏的消息,因此一般需要放到老年代中进行维护。

3 长期存活的对象将进入老年代

 既然虚拟机采用了分代收集的思想来管理内存,那么内存必须能够分辨出那些对象应该放在新生代,哪个放在老年代。因此,虚拟机提出了对象年龄计数器。若对象在 Eden诞生,熬过了一次Minor GC后被Survivor收容,则对象年龄设为1。然后在Survivor中熬过14次Minor GC后,则可以晋升到老年代。

4 动态对象年龄判定

 进行年龄判定的时候,未必一定要熬到门限值再进行垃圾回收,如果Survivor空间中相同年龄所有对象大小的总和大于Survivor空间的一半,年龄大于或等于该年龄的对象就可以直接进入老年代。

5 空间分配担保

 在发生Minor GC之前,虚拟机会先检查老年代中最大可用的连续空间是否大于新生代所有对象总空间,若这个条件成立,那么Minor GC就可以确保是安全的。如果不成立,则查看handlePromotionFailure设置值是否允许担保失败,若允许,则继续检查老年代最大可用的连续空间是否大于历次晋升到老年代的对象的平均大小。若大于则尝试进行一次Minor GC;若小于或者不允许,则尝试进行一次Full GC。

Java虚拟机内存分配和回收策略的更多相关文章

  1. Java虚拟机内存分配与回收策略

    内存分配与回收策略 Minor GC 和 Full GC Minor GC:发生在新生代上,因为新生代对象存活时间很短,因此 Minor GC 会频繁执行, 执行的速度一般也会比较快. Full GC ...

  2. 深入理解Java虚拟机-内存分配与回收策略

    一.内存分配策略 新生代中98%的对象都是"朝生夕死"的,所以并不需要按照1:1的比例来划分内存空间,而是将内存(新生代内存)分为一块较大的Eden(伊甸园)空间和两块较小的Sur ...

  3. JAVA虚拟机内存分配与回收机制

    Java虚拟机(Java Virtual Machine) 简称JVM Java虚拟机是一个想象中的机器,在实际的计算机上通过软件模拟来实现.Java虚拟机有自己想象中的硬件,如处理器.堆栈.寄存器等 ...

  4. java面试-内存分配与回收策略

    1.对象优先在Eden分配 -Xms20M -Xmx20M java堆的大小20M -Xmn10M 新生代10M 老年代10M -XX:SurvivorRatio=8 新生代Eden与一个Surviv ...

  5. Java虚拟机垃圾回收:内存分配与回收策略 方法区垃圾回收 以及 JVM垃圾回收的调优方法

    在<Java对象在Java虚拟机中的创建过程>了解到对象创建的内存分配,在<Java内存区域 JVM运行时数据区>中了解到各数据区有些什么特点.以及相关参数的调整,在<J ...

  6. Java 对象内存分配与回收

    JVM内存区域模型: * 程序计数器,内存区域极小,是当前线程的字节码执行行号指示器: * 虚拟机栈.本地方法栈,即平时所说的“栈”,是虚拟机用来执行方法(包括Java.非Java方法)时,使用的临时 ...

  7. JVM垃圾回收器、内存分配与回收策略

    新生代垃圾收集器 1. Serial收集器 serial收集器即串行收集器,是一个单线程收集器. 串行收集器在进行垃圾回收时只使用一个CPU或一条收集线程去完成垃圾回收工作,并且会暂停其他的工作线程( ...

  8. JVM学习十 -(复习)内存分配与回收策略

    内存分配与回收策略 对象的内存分配,就是在堆上分配(也可能经过 JIT 编译后被拆散为标量类型并间接在栈上分配),对象主要分配在新生代的 Eden 区上,少数情况下可能直接分配在老年代,分配规则不固定 ...

  9. Java虚拟机内存分配详解

    简介 了解Java虚拟机内存分布的好处 1.了解Java内存管理的细节,有助于程序员编写出性能更好的程序.比如,在新的线程创建时,JVM会为每个线程创建一个专属的栈 (stack),其栈是先进后出的数 ...

随机推荐

  1. codeforces838D - Airplane Arrangements

    太妙啦! 我们把座位摆成一个环,在添加另一个座位,表示坐了这个位置就会有人生气,那么我们现在要求的就是没人坐它的方案数Ans,但是这个并不好求,我们发现对于每个位置,它们的Ans都是一样的,而且Ans ...

  2. tomcat + apache 动静分离

    原文地址:http://blog.csdn.net/gengv/article/details/5739438 从网上查了不少资料,想了解一下如何整合Apache和Tomcat,以便让Apache的h ...

  3. SQL 整理

    批量插入 insert into table select ... union all select... insert into table (...) values (...) , (...) i ...

  4. Oracle 整理

    高效分页 select * from ( select rownum r,a from yourtable order by name ) --之所以没有把<=20放在最外面,也就是我一直用的写 ...

  5. Microsoft SilverLightt是一个跨浏览器的、跨平台的插件,为网络带来下一代基于.NETFramework的媒体体验和丰富的交互式应用程序。

    Microsoft Silverlight是一个跨浏览器的.跨平台的插件,为网络带来下一代基于.NETFramework的媒体体验和丰富的交互式应用程序.Silverlight提供灵活的编程模型,并可 ...

  6. V4L2 camera 驱动 capture测试程序【转】

    转自:http://blog.csdn.net/kickxxx/article/details/6336346 在网上找了一个测试程序, 看了看,是根据capture.c修改的.测试步骤如下 . gc ...

  7. Webpack & The Hot Module Replacement热模块替换原理解析

    Webpack & The Hot Module Replacement热模块替换原理解析 The Hot Module Replacement(HMR)俗称热模块替换.主要用来当代码产生变化 ...

  8. python爬虫搜片利器fmovice【转载】

    本篇转自博客:上海-悠悠 原文地址:http://www.cnblogs.com/yoyoketang/tag/python/ 前言 讲真!小编不管看什么电影(大的.小的),不管什么电视剧,小编都没买 ...

  9. poj 3026(BFS+最小生成树)

    Borg Maze Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12032   Accepted: 3932 Descri ...

  10. hdu 3047(扩展并查集)

    Zjnu Stadium Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...