Sun Hotspot JVM的GC策略是分代:
1. Yong Generation: Eden, Survior1, Survivor2
Scavenge GC, Copy算法,GC频繁
2. Old(Tenured) Generation
会引起Full GC, 尽可能减少Full GC次数.一般采用CMS(Concurrency-Mark-Sweep, C is not referening to Compact)算法
3. Permanent Generation
会引起Full GC, 尽可能减少Full GC次数
通过 -XX:PermSize= -XX:MaxPermSize= 设置
permanent Generation Space 保存Class,Method等MetaData信息,与Heap不同,Sun JVM默认64M。
注:
1. GC调优中平衡throughput和pause time两个指标, Server 和 Client JVM会有不同的考量(HotSpot中)
2. new,old space 调优
new space一般占25~40%,如果Stateless对象比较多的话可以考虑多分配一点;相反如果stateful对象比较多,可以多分配一点old space
4. java 启动命令行中加入 -verbose:gc 来measure 当前GC 性能
[GC 325407K->83000K(776768K), 0.2300771 secs]
[GC 325816K->83372K(776768K), 0.2454258 secs]
[Full GC 267628K->83769K(776768K), 1.8479984 secs]
325407K和83000K是Minor GC前后Yong GenerationHeap大小
776768K is the committed size of the heap: the amount of space usable for java objects without requesting more memory from the operating system. Note that this number does not include one of the survivor spaces, since only one can be used at any given time, and also does not include the permanent generation, which holds metadata used by the virtual machine.
我的理解是young 和old generation当前之和除去一个survivor区和permanent区的大小。当前young Generation的大小是逐步增大的,介于xms和xmx之间。
5. -XX:+PrintGCDetails 参数输出的GC log格式会有不同
[GC [DefNew: 64575K->959K(64576K), 0.0457646 secs] 196016K->133633K(261184K), 0.0459067 secs]
indicates that the minor collection recovered about 98% of the young generation, DefNew: 64575K->959K(64576K)
and took 0.0457646 secs
(about 45 milliseconds).
The usage of the entire heap was reduced to about 51% 196016K->133633K(261184K)
and that there was some slight additional overhead for the collection (over and above the collection of the young generation) as indicated by the final time of 0.0459067 secs
.
6. -XX:NewRatio=3
means that the ratio between the young and tenured generation is 1:3. In other words, the combined size of the eden and survivor spaces will be one fourth of the total heap size.
7. -XX:SurvivorRatio=6
sets the ratio between a survivor space and eden to 1:6. In other words, each survivor space will be one sixth the size of eden, and thus one eighth the size of the young generation (not one seventh, because there are two survivor spaces).
分享到:
相关推荐
Java提供了多种GC策略,常见的有: 1. Serial GC:单线程的收集器,适用于轻量级或者客户端应用。 2. ParNew GC:Serial GC的多线程版本,常与CMS(Concurrent Mark Sweep)配合使用。 3. Parallel GC:并行的Full ...
Java GC与性能调优 Java GC与性能调优是 Java programming language 中非常重要的一部分,直接影响着 Java application 的性能。本文档将对 Java GC 与性能调优进行详细的介绍。 一、 Java 平台的逻辑结构 Java ...
本指南旨在帮助开发者深入理解Java GC的工作原理,并提供一系列调优策略与实例,以确保Java应用能够高效稳定地运行。 #### Java GC基础知识 垃圾回收是一种自动化的内存管理机制,它负责回收不再使用的对象所占用...
3. **GC策略与调优**:Java提供了多种GC算法,如Serial、Parallel、Concurrent Mark Sweep (CMS) 和 Garbage First (G1)。每种策略都有其适用场景和优缺点。例如,G1适合大内存、低延迟的应用,而CMS则在内存较小、...
### Java GC工作原理详解 #### 一、引言 在现代软件开发中,Java作为一种广泛使用的编程语言,其强大的功能和高效性深受开发者喜爱。Java的自动内存管理机制是其一大亮点,尤其体现在垃圾收集(Garbage Collection...
Java垃圾收集(GC)专题针对的是Java编程语言中内存管理机制的重要组成部分。Java自1996年推出以来,其最大的改进之一就是引入了受管内存。在Java之前,C和C++语言中的内存泄漏问题十分常见,这导致开发稳定和安全的...
### JVM常用的GC策略详解 #### 一、引言 在Java虚拟机(JVM)中,垃圾收集(GC)是一项至关重要的任务,它自动管理程序运行时不再使用的对象内存,从而避免了手动管理内存可能导致的内存泄漏等问题。本文将详细介绍几...
虽然源码复杂,但通过阅读和分析,可以了解到GC如何判断对象是否存活、如何选择回收策略以及如何优化内存分配。此外,JDK提供了丰富的工具来帮助分析和调试GC行为,如`jconsole`、`jvisualvm`和`jmap`等。例如,`...
- **GC策略**:包括复制算法、标记-清除算法、标记-整理算法、分代收集策略等,根据JVM版本和配置不同而有所不同。 - **GC Roots**:GC开始回收的起点,包括虚拟机栈中引用的对象、方法区中静态字段引用的对象等。...
总之,Java GC调优是一个复杂而细致的过程,需要综合考虑多个因素,包括但不限于堆大小、操作系统资源、JVM版本、GC策略和应用特性。通过合理的调优,可以有效地提升Java应用的性能,降低系统资源的消耗。
【Java GC机制详解】 Java垃圾回收(Garbage Collection, GC)是Java虚拟机...优化GC设置和理解内存分配策略,能够显著提升应用程序的性能和稳定性。因此,深入学习Java GC机制对于任何Java开发者来说都是必备的技能。
Java虚拟机(JVM)是Java程序运行的基础,它的配置参数和垃圾收集(GC)机制对于优化应用程序性能至关重要。本文将深入探讨JVM参数及其与Java垃圾收集相关的知识。 一、JVM参数详解 JVM参数可以分为三类:启动参数...
Java虚拟机(JVM)是运行Java字节码的虚拟机进程。它负责在不同操作系统上...以上就是对JavaGC专家指南中提到的知识点的一个全面解析,涵盖了从虚拟机的基本概念到内存管理,再到垃圾回收和性能调优的各个重要方面。
Java提供了多种GC策略,如Serial、Parallel、Concurrent Mark Sweep (CMS) 和G1等,每种策略在不同的场景下有不同的性能表现。通过VisualVM,开发者可以模拟不同的GC配置,观察其对应用程序性能的影响,从而选择最...
JAVA GC (Garbage Collection) 是Java编程语言中的一个重要特性,它自动管理程序的内存,确保不再使用的对象能够被及时回收,以防止内存泄漏。GC主要针对的是Java堆内存中的对象,这里的对象是由Java栈中的引用指向...
Java垃圾收集(GC)是Java编程中至关重要的一个部分,它自动管理程序的内存,以避免内存泄漏和系统...以上内容概述了Java GC的基本概念、内存管理、垃圾回收机制以及优化策略,是深入理解和优化Java程序性能的关键。
【Java GC on HP-UX Itanium】和【JDK on HP-UX 简要介绍及性能调试概要】这两个主题涉及到的是Java在HP-UX操作系统上的运行环境、内存管理和性能优化,特别是针对Itanium架构的Java垃圾收集(GC)机制。以下是详细...
通过对GC日志的分析,我们可以理解哪些操作导致了频繁的Full GC,从而调整堆大小、设置合适的GC策略,或者优化代码以减少不必要的内存消耗。 总的来说,理解并监控Java应用的JVM GC频率是保障系统稳定性、性能和...
2. 使用适当的GC策略:针对应用特点选择合适的GC类型。 3. 减少对象创建:过多的对象会增加GC负担,应尽量复用对象或使用池化技术。 4. 避免长时间持有强引用:及时解除不再使用的引用,帮助GC识别可回收对象。 5. ...