GC回收建议

1.最基本的建议就是尽早释放无用对象的引用。大多数程序员在使用临时变量的时候,都是让引用变量在退出活动域(scope)后,自动设置为 null.我们在使用这种方式时候,必须特别注意一些复杂的对象图,例如数组,队列,树,图等,这些对象之间有相互引用关系较为复杂。对于这类对象,GC 回收它们一般效率较低。如果程序允许,尽早将不用的引用对象赋为null.这样可以加速GC的工作。

2.尽量少用finalize函数。finalize函数是Java提供给程序员一个释放对象或资源的机会。但是,它会加大GC的工作量,因此尽量少采用finalize方式回收资源。

3.如果需要使用经常使用的图片,可以使用soft应用类型。它可以尽可能将图片保存在内存中,供程序调用,而不引起OutOfMemory.

4.注意集合数据类型,包括数组,树,图,链表等数据结构,这些数据结构对GC来说,回收更为复杂。另外,注意一些全局的变量,以及一些静态变量。这些变量往往容易引起悬挂对象(dangling reference),造成内存浪费。

5.当程序有一定的等待时间,程序员可以手动执行System.gc(),通知GC运行,但是Java语言规范并不保证GC一定会执行。使用增量式GC可以缩短Java程序的暂停时间。

时间: 2024-10-28 19:57:22

GC回收建议的相关文章

java——GC回收机制

1. GC是什么? GC(Gabage Collection):java的垃圾回收机制的根本目的就是跟踪正在使用的对象,然后回收那些不再使用(引用)的对象.java的GC回收机制有两个好处: (1) 避免垃圾过多导致的内存耗尽 (2) 避免不恰当的内存释放导致的内存非法引用 GC主要是对JVM中的堆对象进行识别,如果对象正在被引用,就是活对象.否则就是死的,是可以被回收再分配的. 2. java的内存是如何存储的哪? 堆:用来存储java中创建的对象,new新建的对象都存在java的堆中 栈:用

Java GC回收机制

优秀Java程序员必须了解的GC工作原理 一个优秀的Java程序员必须了解GC的工作原理.如何优化GC的性能.如何与GC进行有限的交互,因为有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只有全面提升内存的管理效率 ,才能提高整个应用程序的性能. 一个优秀的Java程序员必须了解GC的工作原理.如何优化GC的性能.如何与GC进行有限的交互,因为有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只有全面提升内存的管理效率 ,才能提高整个应用程序的性能.本篇文章首先简单介绍GC的工

GC回收算法--当女友跟你提分手!

Java语言引入了垃圾回收机制,让C++语言中令人头疼的内存管理问题迎刃而解,使得我们Java狗每天开开心心地创建对象而不用管对象死活,这些都是Java的垃圾回收机制带来的好处.但是Java的垃圾回收机制的核心原理是什么呢?今天我们来聊聊GC回收算法吧. JVM的GC回收场景很复杂,不是单个算法就可以搞定的,大致可以分为可达性分析算法.标记-清除算法.标记-整理算法.分代回收算法.复制算法. 广场上,女朋友突然跟你闹分手,然后头也不回地一个人走了,留下你一个人站在树下,BGM缓缓响起"雪花飘飘

GC回收算法

GC回收算法 https://www.cnblogs.com/missOfAugust/p/9528166.html Java语言引入了垃圾回收机制,让C++语言中令人头疼的内存管理问题迎刃而解,使得我们Java狗每天开开心心地创建对象而不用管对象死活,这些都是Java的垃圾回收机制带来的好处.但是Java的垃圾回收机制的核心原理是什么呢?今天我们来聊聊GC回收算法吧. JVM的GC回收场景很复杂,不是单个算法就可以搞定的,大致可以分为可达性分析算法.标记-清除算法.标记-整理算法.分代回收算法

老年代 CMS gc回收算法 对hbase的影响

老年代 CMS gc回收算法 对hbase的影响***** 参考链接: 深入研究java gc https://blog.51cto.com/12445535/2372976CMS失败模式(CMS Failure Mode)1.上文提到在正常的情况下CMS整个流程的暂停时间都是很短的,一般也就在10ms-100ms左右.2.然而这与线上的情况并不相符,线上集群在读写压力很大的情况下,经常会出现长时间的卡顿,有些卡顿甚至长达几分钟,导致很严重的读写阻塞,甚至会造成Region Server和Zoo

GC回收算法&&GC回收器

GC回收算法 什么是垃圾? 类比日常生活中,如果一个东西经常没被使用,那么就可以说是垃圾. 同理,如果一个对象不可能再被引用,那么这个对象就是垃圾,应该被回收. 垃圾:不可能再被引用的对象. finalize方法 在对象没有被引用时调用 在Object类里定义 新生代与老年代 IBM公司的研究表明,在新生代中的对象 98% 是朝生夕死的. 在实际的 JVM 新生代划分中,不是采用等分为两块内存的形式.而是分为:Eden 区域.Survivorfrom 区域.Survivorto 区域 这三个区域

简述GC回收机制

目录 一.概述 ? 程序在运行过程中是不断申请内存,释放内存,如果程序只是申请没有释放就会引起内存泄漏内存不足等问题.在C语言.C++中,程序员需要手动的释放内存,如果程序员粗心忘记回收,就会导致程序bug,在Java中,JVM提供自动回收内存机制GC(内存回收器),减少程序员的工作量和减低由于人为导致内存问题. 二.基本原理 ? 将内存中不再被使用的对象进行回收,GC中用于回收的方法称为收集器,由于GC需要消耗一些资源和时间,Java在对对象的生命周期特征进行分析后,按照新生代.旧生代的方式来

java虚拟机学习总结之GC回收算法与GC收集器

GC回收算法 1.标记清除算法分为标记阶段和清除阶段标记阶段:通过特定的判断方式找出无用的对象实例并将其标记清除阶段:将已标记的对象所占用的内存回收缺点:运行多次以后容易产生空间碎片,当需要一整段连续内存时虽然空间足够但是无法分配,会多次触发GC操作. 2.复制算法为了提高标记清除算法的效率,减少内存碎片的产生而出现的,该算法将内存空间分为两个完全相同的两部分,每次只使用其中的一部分.分为标记阶段.复制阶段和清除阶段标记阶段:同标记清除算法的标记阶段一致复制阶段:将为标记的对象全部复制到另一块未

初步了解JVM第三篇(堆和GC回收算法)

在<初步了解JVM第一篇>和<初步了解JVM第二篇>中,分别介绍了: 类加载器:负责加载*.class文件,将字节码内容加载到内存中.其中类加载器的类型有如下:执行引擎:负责解释命令,提交给操作系统执行. 启动类加载器(Bootstrap) 扩展类加载器(Extension) 应用程序类加载器(AppClassLoader) 用户自定义加载器(User-Defined) 执行引擎:负责解释命令,提交给操作系统执行. 本地接口:目的是为了融合不同的编程语言提供给Java所用,但是企业