电脑网站模版,企业官网网站,无锡网站推广哪家好,江门市网站建设垃圾回收机制 掌握 GC 算法之前#xff0c;我们需要先弄清楚 3 个问题。第一#xff0c;回收发生在哪里#xff1f;第二#xff0c;对象在 什么时候可以被回收#xff1f;第三#xff0c;如何回收这些对象#xff1f; 回收发生在哪里#xff1f; JVM 的内存区域中我们需要先弄清楚 3 个问题。第一回收发生在哪里第二对象在 什么时候可以被回收第三如何回收这些对象 回收发生在哪里 JVM 的内存区域中程序计数器、虚拟机栈和本地方法栈这 3 个区域是线程私有的随着 线程的创建而创建销毁而销毁栈中的栈帧随着方法的进入和退出进行入栈和出栈操作 每个栈帧中分配多少内存基本是在类结构确定下来的时候就已知的因此这三个区域的内存 分配和回收都具有确定性。 那么垃圾回收的重点就是关注堆和方法区中的内存了堆中的回收主要是对象的回收方法 区的回收主要是废弃常量和无用的类的回收。 .对象在什么时候可以被回收 那 JVM 又是怎样判断一个对象是可以被回收的呢 一般一个对象不再被引用就代表该对 象可以被回收。 目前有以下两种算法可以判断该对象是否可以被回收。 引用计数算法 这种算法是通过一个对象的引用计数器来判断该对象是否被引用了。每当对 象被引用引用计数器就会加 1每当引用失效计数器就会减 1。当对象的引用计数器的 值为 0 时就说明该对象不再被引用可以被回收了。这里强调一点虽然引用计数算法 的实现简单判断效率也很高但它存在着对象之间相互循环引用的问题。 可达性分析算法 GC Roots 是该算法的基础GC Roots 是所有对象的根对象在 JVM 加载时会创建一些普通对象引用正常对象。这些对象作为正常对象的起始点在垃圾回收 时会从这些 GC Roots 开始向下搜索当一个对象到 GC Roots 没有任何引用链相连 时就证明此对象是不可用的。目前 HotSpot 虚拟机采用的就是这种算法。 以上两种算法都是通过引用来判断对象是否可以被回收。在 JDK 1.2 之后Java 对引用的 概念进行了扩充将引用分为了以下四种 GC 算法 JVM 提供了不同的回收算法来实现这一套回收机制通常垃圾收集器的回收算法可以分为 以下几种 如果说收集算法是内存回收的方法论那么垃圾收集器就是内存回收的具体实现JDK1.7 update14 之后 Hotspot 虚拟机所有的回收器整理如下以下为服务端垃圾收集器 其实在 JVM 规范中并没有明确 GC 的运作方式各个厂商可以采用不同的方式实现垃圾收 集器。 我们可以通过 JVM 工具查询当前 JVM 使用的垃圾收集器类型 首先通过 ps 命令查 询出经常 ID再通过 jmap -heap ID 查询出 JVM 的配置信息其中就包括垃圾收集器的 设置类型。 查看 分析 GC 日志 已知了性能衡量指标现在我们需要通过工具查询 GC 相关日志统计各项指标的信息。 首先我们需要通过 JVM 参数预先设置 GC 日志通常有以下几种 JVM 参数设置 1 -XX:PrintGC 输出 GC 日志
2 -XX:PrintGCDetails 输出 GC 的详细日志
3 -XX:PrintGCTimeStamps 输出 GC 的时间戳以基准时间的形式
4 -XX:PrintGCDateStamps 输出 GC 的时间戳以日期的形式如 2013-05-04T21:53:59.2340800
5 -XX:PrintHeapAtGC 在进行 GC 的前后打印出堆的信息
6 -Xloggc:../logs/gc.log 日志文件的输出路径 笔者推荐文章 敏捷架构的 TOGAF 层次化迭代建模架构规划之如何划分任务边界资源下载 技术架构,业务架构数据架构企业架构行业技术方案 TOGAF | 跟着Byte学架构定制化企业架构元模型-CSDN博客G1相对于CMS的的优势-CSDN博客