1.对象的引用

JDK1.2之后,对象的引用分为了四种情况    强引用:Object obj = new Object();只要强引用还在,垃圾回收器就永远不会收集被引用的对象。    软引用:SoftReference 它用来描述一下可能还有用,但并非必须引用,在系统内存不够时,会被回收。    弱引用:WeakReference ,垃圾回收器工作时,不管内存够不够,都会被回收。    虚引用:PhantomReference.

2.怎么判断是否是一个垃圾对象

①引用计数算法

②可达性(根搜索)算法     虚拟机栈(栈帧中本地变量表)引用的对象      方法区中的类静态属性引用的对象    方法区中常量引用的对象     本地方法栈中JNI的引用对象。

3.垃圾回收的算法

①标记-清除算法      标记所有要回收的对象,然后清除     缺点:效率不高     不连续的内存碎片,

②复制算法     对标记清除的改进,将可用内存分为了大小相等的两块,每次只使用一半,当一块用完了,将还活着的对象复制到另外一快上面,然后把已经使用过的空间一次清理掉     优点: 每次只对一块内存回收,运行高效      不用考虑内存碎片,      只需要移动栈顶指针,      实现简单     缺点:可一次性分配的最大内存减小了一半。

③标记-整理算法     赋值算法适合于新生代,在老年代中,对象存活率高,如果执行过多的赋值操作,效率将会降低,所以老年代一般选标记-整理算法。     与标记清除一样,只是标记后的处理情况不同,不直接对可回收对象进行清除,而是让所有的对象移动到一端,然后清除。

④分代收集     根据对象的存活周期不同将内存划分为好几块,一般分为新生代和老年代,     新生代:大量对象死去,少量存活,复制算法收集。     老年代:存活率高,标记清除或者标记整理。

4.垃圾回收分析

堆中:年轻代(Eden和Survivor)、年老代    年轻代:MinorGc     年老代是Major GC,     FULL GC 是对整个堆来说的,也包括对永生代(持久代方法区)的回收,再1.8中已经没有永生代了,     FULL GC通常会引起一次MinorGC,但不是绝对的。

①明确三点:

对象优先分配在Eden

大对象直接进入老年代

长期存活对象进入老年代

②对回收策略说明两点

a.新生代GC:因为大部分对象具有朝生夕灭特性,因此MinorGC非常频繁

b.老年代GC:发生在老年代的GC出现MajorGC,会伴随至少一次MinorGC。由于老年代的对象生命周期长,因此MajorGC并不频繁,一般都是满了才进行Full GC      速度比MainorGC慢10倍以上,,如果分配了Direct Memory,在老年代Full GC时,会顺便清理Direct Memory的对象。   案例分析??????????

5.性能调优

①通过给Java堆设置超大堆内存来提升服务器的响应速度,但分配超大堆的前提是有把握把应用程序的FullGC频率控制得,因为一次FullGC的时间造成比较长的时间停顿,而控制Full GC的频率是      关键是保证应用程序中绝大多数的对象生存周期不应太长,尤其不能产生批量、周期长的大对象,这样才可以保证老年代的稳定。

②Direct Memory在堆内存外分配,

③线程堆栈:-Xss调整

④Socket缓冲区:每个Socket缓冲区有Receive和Send两个缓冲区,分别占用37KB和25KB的内存,如果无法分配,抛IOException:Too many open files异常

⑤JNI代码:本地库使用的内存不在堆中。    ⑥虚拟机和GC:虚拟机和GC的执行也会消耗一定的内存。

JVM(五)回收机制的更多相关文章

  1. JVM垃圾回收机制总结:调优方法

    转载: JVM垃圾回收机制总结:调优方法 JVM 优化经验总结 JVM 垃圾回收器工作原理及使用实例介绍

  2. JVM内存回收机制简述

    JVM内存回收机制涉及的知识点太多了,了解越多越迷糊,汗一个,这里仅简单做个笔记,主要参考<深入理解Java虚拟机:JVM高级特性与最佳实践(第二版)> 目前java的jdk默认虚拟机为H ...

  3. JVM内存回收机制

    1. JVM内存回收机制简述 http://www.cnblogs.com/lzrabbit/p/3826738.html

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

    JVM内存管理和JVM垃圾回收机制(1) 这里向大家描述一下JVM学习笔记之JVM内存管理和JVM垃圾回收的概念,JVM内存结构由堆.栈.本地方法栈.方法区等部分组成,另外JVM分别对新生代和旧生代采 ...

  5. JVM垃圾回收机制概述

    JVM垃圾回收机制概述 1.定义 是指JVM用于释放那些不再使用的对象所占用的内存. 2.方式 2.1引用计数(早期) 当引用程序创建引用以及引用超出范围时,JVM必须适当增减引用数.当某个对象的引用 ...

  6. Java虚拟机学习笔记——JVM垃圾回收机制

    Java虚拟机学习笔记——JVM垃圾回收机制 Java垃圾回收基于虚拟机的自动内存管理机制,我们不需要为每一个对象进行释放内存,不容易发生内存泄漏和内存溢出问题. 但是自动内存管理机制不是万能药,我们 ...

  7. JVM基础系列第8讲:JVM 垃圾回收机制

    在第 6 讲中我们说到 Java 虚拟机的内存结构,提到了这部分的规范其实是由<Java 虚拟机规范>指定的,每个 Java 虚拟机可能都有不同的实现.其实涉及到 Java 虚拟机的内存, ...

  8. JVM内存管理、JVM垃圾回收机制、新生代、老年代以及永久代

    内存模型 JVM运行时数据区由程序计数器.堆.虚拟机栈.本地方法栈.方法区部分组成,结构图如下所示. JVM内存结构由程序计数器.堆.栈.本地方法栈.方法区等部分组成,结构图如下所示: 1)程序计数器 ...

  9. JVM 垃圾回收机制和常见算法和 JVM 的内存结构和内存分配(面试题)

    一.JVM 垃圾回收机制和常见算法 Sun 公司只定义了垃圾回收机制规则而不局限于其实现算法,因此不同厂商生产的虚拟机采用的算法也不尽相同.GC(Garbage Collector)在回收对象前首先必 ...

随机推荐

  1. Codeforces Round #486 (Div. 3)988D. Points and Powers of Two

    传送门:http://codeforces.com/contest/988/problem/D 题意: 在一堆数字中,找出尽量多的数字,使得这些数字的差都是2的指数次. 思路: 可以知道最多有三个,差 ...

  2. HDU 4607 Park Visit 树的最大直径

    题意: 莱克尔和她的朋友到公园玩,公园很大也很漂亮.公园包含n个景点通过n-1条边相连.克莱尔太累了,所以不能去参观所有点景点. 经过深思熟虑,她决定只访问其中的k个景点.她拿出地图发现所有景点的入口 ...

  3. Python学习之旅:使用Python实现Linux中的ls命令

    一.写在前面 前几天在微信上看到这样一篇文章,链接为:https://mp.weixin.qq.com/s/rl6Sgv3uk_IpoFAx6cWa8w,在这篇文章中,有这样一段话,吸引了我的注意: ...

  4. 从零开始开发IM(即时通讯)服务端(二)

    好消息:IM1.0.0版本已经上线啦,支持特性: 私聊发送文本/文件 已发送/已送达/已读回执 支持使用ldap登录 支持接入外部的登录认证系统 提供客户端jar包,方便客户端开发 github链接: ...

  5. FreeSql (三十五)CodeFirst 自定义特性

    比如项目内已经使用了其它 orm,如 efcore,这样意味着实体中可能存在 [Key],但它与 FreeSql [Column(IsPrimary = true] 不同. Q: FreeSql 实体 ...

  6. 使用DevExpress的PdfViewer实现PDF打开、预览、另存为、打印(附源码下载)

    场景 Winform控件-DevExpress18下载安装注册以及在VS中使用: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1 ...

  7. C++11部分特性

    初识C++的时候,觉得会个STL就差不多了,后来发现了C++11这个东西,以及C++14,C++17QAQ,看了一下,好高深不学,emmmm真香= = 这里就只讲一下对ACM写代码有很高帮助的部分特性 ...

  8. 以商品超卖为例讲解Redis分布式锁

    本案例主要讲解Redis实现分布式锁的两种实现方式:Jedis实现.Redisson实现.网上关于这方面讲解太多了,Van自认为文笔没他们好,还是用示例代码说明. 一.jedis 实现 该方案只考虑R ...

  9. The 10 Most Important Linux Commands/10个最经常使用的命令行

    1. ls 命令:to show all of the major directiories filed under a given file system. for example: ls /app ...

  10. .NET Conf 2019日程(北京时间)

    一年一度的 .NET Conf马上就要开始了,我将日程简易的翻译了一下,并且时间全部转换为北京时间,以方便国内.NETer. 日程 第1天 (北京时间9月24日) .NET Conf 2019 基调 ...