Java GC简介
• 所有Java对象都是分配在Java堆上面的;
• Java上使用垃圾回收机制回收没有引用到的对象;
• Java虚拟机有专门的GC线程用来执行垃圾回收;
• 当GC线程从内存删除一个对象时,首先会调用对象的finalize函数,在这个函数里可以执行自定义
的释放资源操作;
• Java程序自身无法强制启动GC,即使使用System.gc()和Runtime.gc()这样的函数,也只是递交一
个GC请求给GC线程;
• 当无法在Java内存堆(Java heap)上创建对象时,Java虚拟机会抛出OutOfMemoryError。
• 对象没有被其他对象引用,是指从GC Root开始遍历,无法遍历到的对象,GC Root包括:
• Class – 系统里加载的类,这些类不会被卸载,类里的静态变量可能会引用其它Java对象。
• Thread – 正在运行的线程。
• 堆栈上的局部变量 – 堆栈上的函数还要运行,因此他们引用到的对象都是有用的。
• JNI参数和局部变量。
• 锁(Monitor) - 用于线程同步。
Java GC堆结构
•Java堆分成3个部分,或称作届(generation),分别是Young(New) generation, Tenured(Old)
generation,Perm Area of heap。而New generation又细分成Eden space, Survivor 1和Survivor
2。新的对象总是先在Eden space上创建,经过minor GC后,剩余的会挪到Survivor 1,接着就是
Survivor 2。当执行过Major GC后,对象会被挪到Old generation中。
•Perm area主要是用来保存Java类型以及函数的元数据信息,有的内在化(internalization)的字
符串也会放在里面。
Java GC器
•虚拟机提供了好几个GC收集器,Java 5在Serial GC之外,还添加了几个GC收集器:
•Serial GC:只使用一个GC线程执行垃圾回收工作,在执行GC时,其他线程都会暂停工
作,收集young generation里的垃圾对象。
•Parallel (Throughput) GC:使用多个GC线程并行执行垃圾回收工作,在执行GC时,
其他线程都会暂停工作,收集young generation里的垃圾对象。
•Concurrent Mark Sweep(CMS) GC:用于收集old generation里的垃圾对象,跟其他
线程并行工作,当需要标注某个线程里的垃圾对象时,会暂停线程一小会,其他时候可
以与线程并行执行。
•在GC时,通常young generation里的GC,即minor GC很快,当old generation空间不够
时,Java虚拟机首先会尝试CMS GC并行收集,如果这样空间还不能快速回收时,那Java
虚拟机会暂停所有线程执行GC,这个时候称为Full GC。一般来说,Full GC的执行效率
要比minor GC慢很多,程序优化的目标也是尽量减少Full GC的执行次数。
Java 内存堆
•Java虚拟机在启动时,会从操作系统申请一大块内存,后续
Java程序运行时,所有对象都在这个内存块里分配,这个内存块
叫Java Heap。
•Java内存堆在Java程序启动后无法更改,只能通过修改Java程
序的-Xms、–Xmx、-Xmn等启动参数改变设置。当Java堆内存用
光,而且GC也无法收集更多的内存时,抛出OutOfMemoryError。
•可以使用Jconsole、Runtime.maxMemory()、
Runtime.totalMemory()以及Runtime.freeMemory()等函数查询
Java程序的内存堆设置。
- 浏览: 3079 次
- 性别:
相关推荐
以下是一些关于Java内存调优的重点知识: 1. **堆内存设置**: - `-Xmx` 和 `-Xms` 参数用于设置Java虚拟机(JVM)的最大堆内存(Maximum Heap Size)和初始堆内存(Initial Heap Size),确保应用启动时就能获得...
《JAVA内存调优白皮书(IBM)》是IBM公司发布的一份技术文档,主要针对Java应用程序的内存管理和性能优化提供了深入的指导。在Java世界中,内存管理是决定程序性能、稳定性和可扩展性的重要因素,特别是Java虚拟机...
### Java性能调优知识点概述 #### 一、高性能Java代码编写原则 - **算法与数据结构**:选择合适的数据结构可以极大地提升程序运行效率。例如,对于查找操作频繁的场景,哈希表(如`HashMap`)比链表或数组更高效。...
《阿里巴巴Java性能调优实战》(2021华山版)则聚焦于Java应用的性能优化技巧,内容包括JVM内存调优、GC算法选择、线程池配置、数据库优化、网络I/O优化等关键领域。这本书通过实际案例分析,指导开发者如何定位并解决...
模块四主要讲解 JVM 性能监测及调优,包括 Java 对象的创建和回收、内存分配等。 模块五:设计模式调优 模块五主要讲解设计模式调优,包括架构设计中使用设计模式来优化架构设计的经验和实践。 模块六:数据库...
在Java应用程序的性能调优过程中,掌握一系列命令行工具是至关重要的。这些工具可以帮助开发者监控应用程序的运行状态,诊断性能瓶颈,并对JVM进行调优。以下是一些常用的Java性能调优命令及其用法和相关知识点。 1...
9. JVM性能监测及调优:JVM性能监测及调优包括Java对象的创建和回收、内存分配等。 10. 设计模式调优:设计模式调优包括通过复杂的应用场景,分享设计优化案例。 11. 数据库性能调优:数据库性能调优包括数据库常用...
这份“Java性能调优大全”提供了全面的指南,包括VisualVM的使用、JVM的性能优化、OMM(可能是指Oracle Management Monitor)的场景、jstat工具的详细解析以及性能分析工具的比较和内存溢出问题的解决方案。...
本专题“47-Java性能调优实战”聚焦于电商系统的分布式事务处理,旨在帮助开发者掌握如何有效地解决内存持续上升的问题以及优化网络通信和NIO实现。 首先,内存持续上升是Java应用中常见的性能问题,可能导致系统...
### Java性能调优概述 #### 一、性能优化的重要性与基本概念 在现代软件开发中,性能优化是一项至关重要的任务。对于Java开发者来说,优化不仅仅意味着让程序运行更快,还包括了减少内存消耗、提高响应速度等多个...
Java性能调优工具及方法介绍 可配合工具用于内存泄漏问题快速排查
【Java性能调优指南】 在Java开发中,性能调优是一项关键任务,它涉及到程序运行效率、资源利用和系统稳定性。本指南主要关注Java虚拟机(JVM)调优、编码最佳实践以及微基准测试的重要性。 **基本规则** 1. **...
《阿里巴巴Java性能调优实战(2021华山版)》是一本专注于Java应用程序性能优化的专业书籍,由阿里巴巴的技术专家团队倾力打造。这本书基于阿里巴巴的实际业务场景,结合丰富的实践经验,为Java开发者提供了深入、...
java 性能调优,主要从java内存管理方面,介绍了java的内存管理,垃圾回收(GC),调优注意事项等方面系统的介绍了java的内存管理机制。
Java性能调优主要聚焦在JVM的优化,其中包括内存模型的理解、垃圾收集(GC)机制以及如何处理常见的Out of Memory (OOM)异常。首先,我们要理解JVM的内存模型,这是进行性能调优的基础。 JVM内存模型由堆、栈、方法...
二、JVM内存调优 1. 堆内存:Java对象主要存储在堆中,通过调整新生代、老年代的比例,以及设置新生代和老年代的大小,可以优化对象的分配和回收。 2. 方法区:存储类信息、常量、静态变量等,合理设定大小可避免...
Java内存主要分为五个区域:堆(Heap)、栈(Stack)、方法区(Method Area)、程序计数器(PC Register)和本地方法栈(Native Method Stack)。 1. 堆(Heap):这是Java对象的主要存储区域,所有通过new创建的...
总之,Java性能调优是一个复杂且细致的过程,需要结合实际应用场景,深入理解JVM的工作原理,以及垃圾收集和内存管理策略。通过合理的配置和持续的测试,可以显著提升程序的运行效率。对于那些寻求极致性能的开发者...
### Java应用性能内存调优 #### 一、背景介绍 随着淘宝等大型电商平台的发展,每日的访问量达到了惊人的数量级。例如,Taobao每天的IPV(itemDetail)访问量超过1亿次,Detail机器每天的访问量达到了60万次。面对...