JVM垃圾回收策略

1.静态内存分配和回收

  编译时已经确定了内存空间大小,程序被加载后则一次性分配好内存空间.程序结束后,则对应栈帧撤销,分配的静态内存空间则被回收.

2.动态内存分配和回收

  程序运行动态分配内存空间,回收时则由垃圾收集器负责.

3.垃圾收集器

A.正确的检测出垃圾对象(关键功能)

B.释放垃圾对象占用的内存空间

4.基于分代的垃圾收集算法(hostpot)

算法设计思路:

  把对象按照寿命的长短进行分组(年轻代,年老代),新创建的对象分配在年轻代中,对象经过几次垃圾回收后,仍然存活的对象则划分到年老代中.年老代的收集不像年轻代那么频繁,这样就减少了每次垃圾收集时所要扫描的对象数量,从而提高了垃圾回收效率.

                           基于分代的对结构

JVM将整个堆划分为Young区,Old区,Perm区,分别存放不同年龄的对象.

  • Young区:分为Eden区和Survivor区,新创建的对象都在Eden区,当Eden区满后会触发minorGC,将Eden区仍然存活的对象复制到其中一个Servivor区中,另外一个Servivor区中的存活对象也复制到这个Survivor中,以保证始终有一个Servivor区是空的.
  • Old区:Servivor区中对象存放不下后会触发minorGC,将存活的对象放入Old区,Servivor区中的对象足够老,会直接放入Old区.如果Old区满了后会触发FullGC,回收整个堆内存.
  • Perm区:这个地方存放的基本都是类的class对象,如果一个类被频繁的加载可能会导致Perm区满,Perm区的垃圾回收也是由FullGC触发的.

 Sun对堆中不同代大小给出的建议:

一般建议Young区的大小为整个堆的1/,而Young区中Survivor区一般设置为整个Young区的1/

JVM内存管理中的垃圾回收策略的更多相关文章

  1. JVM内存管理机制和垃圾回收机制

    JVM内存管理机制和垃圾回收机制 JVM结构 图片描述: java源码编译成class文件 class文件通过类加载器加载到内存 其中方法区存放的是运行时的常量.静态变量.类信息等,被所有线程共享 堆 ...

  2. 浅谈jvm中的垃圾回收策略

    下面小编就为大家带来一篇浅谈jvm中的垃圾回收策略.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧   java和C#中的内存的分配和释放都是由虚拟机自动管理的,此前我已 ...

  3. JVM内存模型和GC垃圾回收

    JVM 内存区域 1.程序计数器 这是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的行号指示器,指的是上次代码被执行的地方,线程私有. 2.Java 虚拟机栈 它是 Java方法执行的 ...

  4. JVM内存区域划分及垃圾回收

    第一部分.闲扯+概述 近来在研读<深入理解java虚拟机>一书,读完之后做个小结,算是记录一下自己的学习所得,在成长的路上,只能死磕. 要理解JVM,就要先从其内存区域划分开始,知道其由几 ...

  5. php内存管理机制与垃圾回收机制

    PHP内存管理机制 1 var_dump(memory_get_usage()); //获取内存 2 $a = "laruence"; //定义一个变量 3 var_dump(me ...

  6. Python内存管理方式和垃圾回收算法解析

    在列表,元组,实例,类,字典和函数中存在循环引用问题.有 __del__ 方法的实例会以健全的方式被处理.给新类型添加GC支持是很容易的.支持GC的Python与常规的Python是二进制兼容的. 分 ...

  7. php内存管理机制、垃圾回收机制

    一.内存管理机制 先看一段代码: <?php //内存管理机制 var_dump(memory_get_usage());//获取内存方法,加上true返回实际内存,不加则返回表现内存 $a = ...

  8. 浅谈Chrome V8引擎中的垃圾回收机制

    垃圾回收器 JavaScript的垃圾回收器 JavaScript使用垃圾回收机制来自动管理内存.垃圾回收是一把双刃剑,其好处是可以大幅简化程序的内存管理代码,降低程序员的负担,减少因 长时间运转而带 ...

  9. 浅谈V8引擎中的垃圾回收机制

    最近在看<深入浅出nodejs>关于V8垃圾回收机制的章节,转自:http://blog.segmentfault.com/skyinlayer/1190000000440270 这篇文章 ...

随机推荐

  1. sqlserver 脚本和批处理指令小结

    一.脚本基础     1.USE语句          设置当前数据库.     2.声明变量          语法:DECLARE @变量名 变量类型          在声明变量后,给变量赋值之 ...

  2. Xamarin.Forms学习之位图(二)

    上篇文章分享了如何加载网络图片和PCL中的图片,所以今天继续分享关于如何加载平台的内嵌图片,在这之前说一下上篇文章开头的一个问题:为什么不能加载UWP项目,这是因为我升级了UWP的SDK,而Xamar ...

  3. hive表信息查询:查看表结构、表操作等

    转自网友的,主要是自己备份下 有时候不记得! 问题导读:1.如何查看hive表结构?2.如何查看表结构信息?3.如何查看分区信息?4.哪个命令可以模糊搜索表 1.hive模糊搜索表 show tabl ...

  4. Delphi里的Windows消息(可查MSDN指定位置)

    各种控件的通知消码和控制消息可由MSDN-> Platform SDK-> User Interface Services->Windows User Interface->C ...

  5. window.onload和$(document).ready()比较

    浏览器在页面加载完毕后,JS通常使用window.onload方法为DOM元素添加事件,而jQuery使用的是$(document).ready()方法.两者功能相似,但也有细微差异,下面简要对比一下 ...

  6. Wicket:一种构建和测试动态 Web 页面的简化框架

    https://www.ibm.com/developerworks/cn/web/wa-aj-wicket/

  7. R&python机器学习之朴素贝叶斯分类

    朴素贝叶斯算法描述应用贝叶斯定理进行分类的一个简单应用.这里之所以称之为“朴素”,是因为它假设各个特征属性是无关的,而现实情况往往不是如此. 贝叶斯定理也称贝叶斯推理,早在18世纪,英国学者贝叶斯(1 ...

  8. SQL实现分页存储过程

    SQL分页存储过程的编写: --获得分页的DATASET资源 ALTER PROC sp_GetSource( @PageSize INT, --每页显示条数 @PageIndex INT, --页码 ...

  9. c#读取xml操作

    1/定义一个XmlDocument对象xDoc 2/通过XmlDocument来load需要读取的xml文件 3/通过XmlDocument的SelectSingleNode来找到节点,并把节点转换为 ...

  10. 在像Angular2这样的SPA应用中使用Google Analytics的方法

    Angular2のようなシングルページアプリケーションでGoogleアナリティクスを使う方法 如何在像Angular2这样的SPA应用中使用Google Analytics? 试着调查了一下. 由于S ...