垃圾回收机制

JVM GC参数以及GC算法的应用

萝らか妹 提交于 2021-02-13 07:42:38
之前一篇 Blog 已经将GC的机制以及GC的算法讲了一下。 而这篇Blog主要是讨论这些GC的算法在JVM中的不同应用。 1. 串行收集器 串行收集器是 最古老,最稳定以及 效率高的收集器 可能会产生较长的停顿, 只使用一个线程去回收 -XX:+UseSerialGC 新生代、老年代使用串行回收 新生代复制算法 老年代标记-压缩 串行收集器的日志输出: 0.844: [GC 0.844: [DefNew: 17472K->2176K(19648K), 0.0188339 secs] 17472K->2375K(63360K), 0.0189186 secs] [Times: user=0.01 sys=0.00, real=0.02 secs] 8.259: [Full GC 8.259: [Tenured: 43711K->40302K(43712K), 0.2960477 secs] 63350K->40302K(63360K), [Perm : 17836K->17836K(32768K)], 0.2961554 secs] [Times: user=0.28 sys=0.02, real=0.30 secs] 2. 并行收集器 2.1 ParNew -XX:+UseParNewGC(new代表新生代,所以适用于新生代) 新生代并行 老年代串行

成为JavaGC专家Part II — 如何监控Java垃圾回收机制

落爺英雄遲暮 提交于 2019-11-29 00:37:39
英文原文: cubrid ,编译: ImportNew - 王晓杰 本文是成为Java GC专家系列文章的第二篇。在第一篇《 深入浅出Java垃圾回收机制 》中我们学习了不同GC算法的执行过程,GC是如何工作的,什么是新生代和老年代,你应该了解的JDK7中的5种GC类型,以及这5种类型对于应用性能的影响。 在本文中,我将解释 JVM到底是如何执行垃圾回收处理的 。 什么是GC监控? 垃圾回收收集监控 指的是搞清楚JVM如何执行GC的过程,例如,我们可以查明: 1. 何时一个新生代中的对象被移动到老年代时,所花费的时间。 2. Stop-the-world 何时发生的,持续了多长时间。 GC监控是为了鉴别JVM是否在高效地执行GC,以及是否有必要进行额外的性能调优。基于以上信息,我们可以修改应用程序或者调整GC算法(GC优化)。 如何监控GC 有很多种方法可以监控GC,但其差别仅仅是GC操作通过何种方式展现而已。GC操作是由JVM来完成,而GC监控工具只是将JVM提供的GC信息展现给你,因此,不论你使用何种方式监控GC都将得到相同的结果。所以你也就不必去学习所有的监控GC的方法。但是因为学习每种监控方法不会占用太多时间,了解多一点可以帮助你根据不同的场景选择最为合适的方式。 下面所列的工具以及JVM参数并不适用于所有的HVM供应商。这是因为并没有关于GC信息的强制标准

JVM内存模型及垃圾收集策略解析

拈花ヽ惹草 提交于 2019-11-27 07:19:52
AD: JVM内存模型是Java的核心技术之一,之前51CTO曾为大家介绍过 JVM分代垃圾回收策略的基础概念 ,现在很多编程语言都引入了类似Java JVM的内存模型和垃圾收集器的机制,下面我们将主要针对Java中的JVM内存模型及垃圾收集的具体策略进行综合的分析。 一 JVM内存模型 1.1 Java栈 Java栈是与每一个线程关联的,JVM在创建每一个线程的时候,会分配一定的栈空间给线程。它主要用来存储线程执行过程中的局部变量,方法的返回值,以及方法调用上下文。栈空间随着线程的终止而释放。StackOverflowError:如果在线程执行的过程中,栈空间不够用,那么JVM就会抛出此异常,这种情况一般是死递归造成的。 1.2 堆 Java中堆是由所有的线程共享的一块内存区域,堆用来保存各种JAVA对象,比如数组,线程对象等。 1.2.1 Generation JVM堆一般又可以分为以下三部分: ◆ Perm Perm代主要保存class,method,filed对象,这部门的空间一般不会溢出,除非一次性加载了很多的类,不过在涉及到热部署的应用服务器的时候,有时候会遇到java.lang.OutOfMemoryError : PermGen space 的错误,造成这个错误的很大原因就有可能是每次都重新部署,但是重新部署后,类的class没有被卸载掉