JVM(五)回收机制
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(五)回收机制的更多相关文章
- JVM垃圾回收机制总结:调优方法
转载: JVM垃圾回收机制总结:调优方法 JVM 优化经验总结 JVM 垃圾回收器工作原理及使用实例介绍
- JVM内存回收机制简述
JVM内存回收机制涉及的知识点太多了,了解越多越迷糊,汗一个,这里仅简单做个笔记,主要参考<深入理解Java虚拟机:JVM高级特性与最佳实践(第二版)> 目前java的jdk默认虚拟机为H ...
- JVM内存回收机制
1. JVM内存回收机制简述 http://www.cnblogs.com/lzrabbit/p/3826738.html
- JVM内存管理和JVM垃圾回收机制
JVM内存管理和JVM垃圾回收机制(1) 这里向大家描述一下JVM学习笔记之JVM内存管理和JVM垃圾回收的概念,JVM内存结构由堆.栈.本地方法栈.方法区等部分组成,另外JVM分别对新生代和旧生代采 ...
- JVM垃圾回收机制概述
JVM垃圾回收机制概述 1.定义 是指JVM用于释放那些不再使用的对象所占用的内存. 2.方式 2.1引用计数(早期) 当引用程序创建引用以及引用超出范围时,JVM必须适当增减引用数.当某个对象的引用 ...
- Java虚拟机学习笔记——JVM垃圾回收机制
Java虚拟机学习笔记——JVM垃圾回收机制 Java垃圾回收基于虚拟机的自动内存管理机制,我们不需要为每一个对象进行释放内存,不容易发生内存泄漏和内存溢出问题. 但是自动内存管理机制不是万能药,我们 ...
- JVM基础系列第8讲:JVM 垃圾回收机制
在第 6 讲中我们说到 Java 虚拟机的内存结构,提到了这部分的规范其实是由<Java 虚拟机规范>指定的,每个 Java 虚拟机可能都有不同的实现.其实涉及到 Java 虚拟机的内存, ...
- JVM内存管理、JVM垃圾回收机制、新生代、老年代以及永久代
内存模型 JVM运行时数据区由程序计数器.堆.虚拟机栈.本地方法栈.方法区部分组成,结构图如下所示. JVM内存结构由程序计数器.堆.栈.本地方法栈.方法区等部分组成,结构图如下所示: 1)程序计数器 ...
- JVM 垃圾回收机制和常见算法和 JVM 的内存结构和内存分配(面试题)
一.JVM 垃圾回收机制和常见算法 Sun 公司只定义了垃圾回收机制规则而不局限于其实现算法,因此不同厂商生产的虚拟机采用的算法也不尽相同.GC(Garbage Collector)在回收对象前首先必 ...
随机推荐
- 2018中国大学生程序设计竞赛 - 网络选拔赛 hdu6438 Buy and Resell 买入卖出问题 贪心
Buy and Resell Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)To ...
- 牛客小白月赛4 I 合唱队形 思维 字符串
链接:https://www.nowcoder.com/acm/contest/134/I来源:牛客网 题目描述 铁子的班级在毕业晚会有一个合唱节目,到了毕业晚会的时候,他们必须排成一排一起合唱&qu ...
- 牛客多校第五场 F take 期望转化成单独事件概率(模板) 树状数组
链接:https://www.nowcoder.com/acm/contest/143/F来源:牛客网 Kanade has n boxes , the i-th box has p[i] proba ...
- codeforces 766 D. Mahmoud and a Dictionary(种类并查集+stl)
题目链接:http://codeforces.com/contest/766/problem/D 题意:给你n个单词,m个关系(两个单词是反义词还是同义词),然后问你所给的关系里面有没有错的,最后再给 ...
- NPOI导出Excel封装
直接上代码 public class ExcelUtils { public static ICellStyle CreateStyle(IWorkbook workbook, string font ...
- hotcss.js Flexible 移动端适配在dpr=2和dpr=3出现的字体大小设置不正确问题.
这段时间一直在用hotcss做移动端适配,做了几个页面没有发现什么问题,后来老大要加快进度,我把项目分出一块给另一个同事做,她发现了一个问题就是字体在dpr=2,dpr=3,的设备上字体大小显示老是不 ...
- 题解 洛谷P1071【潜伏者】
题目链接:https://www.luogu.org/problem/P1071 题意概括:给你一段原来截获的英文密码和与之对应的明文,如果密码表非F♂A法,输出"Failed" ...
- FreeSql 新手上路系列教程已发布在 cnblogs
FreeSql 是一个功能强大的对象关系映射程序(O/RM),支持 .NETCore 2.1+ 或 .NETFramework 4.5+(QQ群:4336577) FreeSql采用MIT开源协议托管 ...
- Java如何创建不存在的指定路径的文件?
实际应用中,要在指定位置创建一个文件,但文件及文件之前的目录都不存在,此时可用以下方法进行创建. 以下是主要代码: File f = new File("I:" + File.se ...
- 第一次作业:使用Packet Tracer分析HTTP包
0 个人信息 张樱姿 201821121038 计算1812 1 实验目的 熟练使用Packet Tracer工具.分析抓到的HTTP数据包,深入理解:HTTP协议,包括语法.语义.时序. 2 实验内 ...