jvm之GC知识点

GCRoots:

虚拟机栈(栈帧中的局部变量表)引用的对象

方法区中静态属性引用的对象

方法去中常量引用的对象

本地方法栈中JNI(NATIVE方法)引用的对象

引用: reference类型数据中存储着另外一块地址的起始地址

强引用:通常的引用,只要引用存在便不会被回收

软引用:有用但非必需的对象,在内存将要发生内存溢出异常时,会将这些对象列入范围,进行二次回收。

弱引用:非必需对象,只能生存到下次回收之前,无论内存充足与否,都会被回收。

虚引用:对生存无影响,无法通过虚引用获得对象实例,为一个对象设置虚引用关联的目的是在这个对象被回收之前收到一个系统通知。

标记死亡:

可达性分析筛选对象=》是否有必要执行finallize()方法(有没有覆盖finallize方法,是否已由虚拟机调用)=》等待回收

||

F-Queue队列(由虚拟机建立,低优先级的Finallize线程执行(出发finallize()方法,不等待完成(防止finallize方法阻塞)))

方法区回收:

效率低,回收很少

废弃常量:

无用的类:

该类所有的实例都被回收,java堆中不存在该类的实例。

加载该类的classloader()已经被回收。

该类对应的java.lang.Class对象没有在任何对象中被引用,无法在任何地方通过反射访问该类的方法。

引用计数法,可达性分析判定对象存活。

回收算法:

标记-清除:标记所有需要回收的对象,然后回收。效率低,空间碎片问题

复制算法:将内存花费为等大小两块儿,每次只使用一块儿,当一块儿用完,将所有还存活的对象复制到另一块儿,然后把使用过的内存空间一次性清理掉。

实现简单,运行高效;空间浪费;对象存活率较高时,效率低;

标记整理(老年代):

标记可回收对象=》所有可存活对象向内存一端移动=》清理边界外的内存。

分代回收:

如年轻代的复制算法,老年代的标记清除,或者标记整理算法。

HotSpot虚拟机

GC Roots枚举:在安全点通过ooPMap引用表进行枚举,

安全点:方法调用,循环跳转,异常跳转产生安全点=》进入GC

安全区域:处理不执行的程序

垃圾收集器:

Serial

New:Client模式下新生代默认收集器,根据回收内存的大小,简单而高效

Old:主要用在Client模式下老年代收集,

Parallel

Serial的对线程版本。

New:Server模式下新生代默认的收集器,默认搭配老年代CMS收集器,默认开启线程数=CPU个数。

Scavenge:新生代收集器,复制算法,吞吐量优先。-XX:UserAdaptiveSizePolicy 自适应

Old:Scavenge的老年代版本收集器。标记-整理算法

CMS: Concurrent Mark Sweep 并行收集 低停顿,默认线程数 (cpu数 + 3)/4

初始标记=》并发标记=》重新标记=》并发清理

cpu资源敏感(线程数 并发处理过程影响)

无法处理浮动垃圾(并发阶段用户线程产生的垃圾)

标记-清除回收算法产生空间碎片:

+UseCMSCompactAtFullCollection(默认开启)Full GC时 compact

+UseCMSFullGCsBeforeCompact(默认0)执行compact的FullGC间隔。

G1:服务端收集器

并行与并发

分代收集:

空间整合:整体 标记-整理 算法,局部(region)复制算法,避免空间碎片

可预测的停顿:预测时间模型

吞吐量:运行用户代码的时间/(运行用户代码时间+垃圾回收时间)

jvm内存管理:分配内存+回收内存

大对象:需要大量连续空间的java对象(如:字符串,数组)

对象优先在Eden区分配

大对象直接进入老年代 -XX:PretenureSizeThreshod 直接进入老年去的大对象阈值。避免新生代去的大量复制

对象年龄计数器(Age),MinorGC之后进入Survivor区(Age=1),每经一次MinorGC,Age+1,达到-XX:MaxTenuringThreshod后,或者Survivor存活量大于一半,进入老年代。

原文地址:https://www.cnblogs.com/niejunlei/p/8650500.html

时间: 2024-10-26 05:02:41

jvm之GC知识点的相关文章

JVM的GC概述

JVM的GC概述 GC即垃圾回收,是指jvm用于释放那些不再使用的对象所占用的内存.在充分理解了垃圾收集算法和执行过程后,才能有效的优化它的性能. 有些垃圾收集专用于特殊的应用程序.比如,实时应用程序主要是为了避免垃圾收集中断,而大多数OLTP应用程序则注重整体效率.垃圾收集的目的在于清除不再使用的对象.gc通过确定对象是否被活动对象引用来确定是否收集该对象.两种常用的方法是引用计数和对象引用遍历.引用计数引用计数存储对特定对象的所有引用数,也就是说,当应用程序创建引用以及引用超出范围时,jvm

jvm的GC日志分析 [转]

jvm的GC日志分析 标签: jvm内存javagc 2015-06-22 16:37 1566人阅读 评论(1) 收藏 举报  分类: Java(4)  JVM的GC日志的主要参数包括如下几个: -XX:+PrintGC 输出GC日志 -XX:+PrintGCDetails 输出GC的详细日志 -XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式) -XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:5

HotSpot JVM and GC basics study note

Hotspot JVM and GC basics study note JVM components HotSpot JVM comprises three main components: the class loader, the runtime data areas and the execution engine. Key JVM components There are three key components related to tune performance: the hea

Java JVM- jstat查看jvm的GC情况[转]

jps(Java Virtual Machine Process Status Tool)是JDK 1.5提供的一个显示当前所有java进程pid的命令,简单实用,非常适合在linux/unix平台上简单察看当前java进程的一些简单情况. jps存放在JAVA_HOME/bin/jps,使用时为了方便请将JAVA_HOME/bin/加入到Path. jstat        1. jstat -gc pid             可以显示gc的信息,查看gc的次数,及时间.         

JVM层GC调优(下)

GC日志格式 本文是 JVM层GC调优(上) 的后续,在上一篇文章中,我们介绍了JVM的内存结构.常见的垃圾回收算法以及垃圾收集器和不同收集器中的一些GC调优参数.所以通过上文,我们也对GC相关的内容有了一定的了解. 但是光知道一些调优参数是没用的,我们需要能够从GC的日志中去分析可以调优的地方,这样才能使用这些参数去进行相应的调整,所以本小节将介绍一下不同收集器的GC日志格式. 我们这里以Tomcat为例,首先需要在Tomcat的catalina.sh脚本文件中加入打印GC日志的相关参数,如下

JVM之GC算法的实现(垃圾回收器)

上一节:<JVM之GC算法> 知道GC算法的理论基础,我们来看看具体的实现.只有落地的理论,才是真理. 一.JVM垃圾回收器的结构 JVM虚拟机规范对垃圾收集器应该如何实现没有规定,因为没有最好的垃圾收集器,只有最适合的场景. 图中展示了7种作用于不同分代的收集器,如果两个收集器之间存在连线,则说明它们可以搭配使用.虚拟机所处的区域则表示它是属于新生代还是老年代收集器. 7种:serial收集器.parnew收集器.parallel scavenge收集器.serial  old 收集器.pa

Linux查看某个服务JVM的GC和堆内存使用情况

一.  使用 jps 命令查看配置了JVM的服务 jps 标红部分是进程号 二.查看某个进程JVM的GC使用情况  jstat -gc 71614 5000 jstat -gc 进程号 刷新时间 S0C:年轻代中第一个survivor(幸存区)的容量 (字节) S1C:年轻代中第二个survivor(幸存区)的容量 (字节) S0U :年轻代中第一个survivor(幸存区)目前已使用空间 (字节) S1U :年轻代中第二个survivor(幸存区)目前已使用空间 (字节) EC :年轻代中Ed

Java的一些基础小知识之JVM与GC (转)

一.JVM是什么 Java虚拟机(英语:Java Virtual Machine,缩写为JVM),又名爪哇虚拟器,一种能够运行Java bytecode的虚拟机,以堆栈结构机器来进行实做.最早由太阳微系统所研发并实现第一个实现版本,是Java平台的一部份,能够运行以Java语言写作的软件程序. Java虚拟机有自己完善的硬体架构,如处理器.堆栈.寄存器等,还具有相应的指令系统.JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多

JVM的GC机制及JVM的调优方法

内存管理和垃圾回收是JVM非常关键的点,对Java性能的剖析而言,了解内存管理和垃圾回收的基本策略非常重要. 1.在程序运行过程当中,会创建大量的对象,这些对象,大部分是短周期的对象,小部分是长周期的对象,对于短周期的对象,需要频繁地进行垃圾回收以保证无用对 象尽早被释放掉,对于长周期对象,则不需要频率垃圾回收以确保无谓地垃圾扫描检测.为解决这种矛盾,Sun JVM的内存管理采用分代的策略. 1)年轻代(Young Gen):年轻代主要存放新创建的对象,内存大小相对会比较小,垃圾回收会比较频繁.