- 浏览: 26817 次
- 性别:
- 来自: 杭州
最新评论
Java语言建立了垃圾收集机制,用以跟踪正在使用的对象和发现并回收不再使用(引用)的对象。该机制可以有效防范动态内存分配中可能发生的两个危险:因内存垃圾过多而引发的内存耗尽,以及不恰当的内存释放所造成的内存非法引用。
垃圾收集算法的核心思想是:对虚拟机可用内存空间,即堆空间中的对象进行识别,如果对象正在被引用,那么称其为存活对象,反之,如果对象不再被引用,则为垃圾对象,可以回收其占据的空间,用于再分配。垃圾收集算法的选择和垃圾收集系统参数的合理调节直接影响着系统性能,因此需要开发人员做比较深入的了解。
2.触发主GC(Garbage Collector)的条件
JVM进行次GC的频率很高,但因为这种GC占用时间极短,所以对系统产生的影响不大。更值得关注的是主GC的触发条件,因为它对系统影响很明显。总的来说,有两个条件会触发主GC:
①当应用程序空闲时,即没有应用线程在运行时,GC会被调用。因为GC在优先级最低的线程中进行,所以当应用忙时,GC线程就不会被调用,但以下条件除外。
②Java堆内存不足时,GC会被调用。当应用线程在运行,并在运行过程中创建新对象,若这时内存空间不足,JVM就会强制地调用GC线程,以便回收内存用于新的分配。若GC一次之后仍不能满足内存分配的要求,JVM会再进行两次GC作进一步的尝试,若仍无法满足要求,则 JVM将报“out of memory”的错误,Java应用将停止。
由于是否进行主GC由JVM根据系统环境决定,而系统环境在不断的变化当中,所以主GC的运行具有不确定性,无法预计它何时必然出现,但可以确定的是对一个长期运行的应用来说,其主GC是反复进行的。
3.减少GC开销的措施
根据上述GC的机制,程序的运行会直接影响系统环境的变化,从而影响GC的触发。若不针对GC的特点进行设计和编*,就会出现内存驻留等一系列负面影响。为了避免这些影响,基本的原则就是尽可能地减少垃圾和减少GC过程中的开销。具体措施包括以下几个方面:
(1)不要显式调用System.gc()
此函数建议JVM进行主GC,虽然只是建议而非一定,但很多情况下它会触发主GC,从而增加主GC的频率,也即增加了间歇性停顿的次数。
(2)尽量减少临时对象的使用
临时对象在跳出函数调用后,会成为垃圾,少用临时变量就相当于减少了垃圾的产生,从而延长了出现上述第二个触发条件出现的时间,减少了主GC的机会。
(3)对象不用时最好显式置为Null
一般而言,为Null的对象都会被作为垃圾处理,所以将不用的对象显式地设为Null,有利于GC收集器判定垃圾,从而提高了GC的效率。
(4)尽量使用StringBuffer,而不用String来累加字符串(详见blog另一篇文章Java中String与StringBuffer)
由于String是固定长的字符串对象,累加String对象时,并非在一个String对象中扩增,而是重新创建新的String对象,如 Str5=Str1+Str2+Str3+Str4,这条语句执行过程中会产生多个垃圾对象,因为对次作“+”*作时都必须创建新的String对象,但这些过渡对象对系统来说是没有实际意义的,只会增加更多的垃圾。避免这种情况可以改用StringBuffer来累加字符串,因StringBuffer 是可变长的,它在原有基础上进行扩增,不会产生中间对象。
(5)能用基本类型如Int,Long,就不用Integer,Long对象
基本类型变量占用的内存资源比相应对象占用的少得多,如果没有必要,最好使用基本变量。
(6)尽量少用静态对象变量
静态变量属于全局变量,不会被GC回收,它们会一直占用内存。
(7)分散对象创建或删除的时间
集中在短时间内大量创建新对象,特别是大对象,会导致突然需要大量内存,JVM在面临这种情况时,只能进行主GC,以回收内存或整合内存碎片, 从而增加主GC的频率。集中删除对象,道理也是一样的。它使得突然出现了大量的垃圾对象,空闲空间必然减少,从而大大增加了下一次创建新对象时强制主GC 的机会。
希望和参加达内Java培训的同学们交流,有不对的地方请指出.
发表评论
-
spring bean初始化
2015-05-20 17:51 4871.配置文件中每一个<bean>解析成一个Bean ... -
java 基本类型存储解析
2012-07-11 12:53 998byte b=-128; byte b=127; 都是可以编 ... -
nio
2012-01-31 16:57 813原来的I/O包和NIO处理数据最大的不同之处在于数据打 ... -
null
2012-01-30 17:34 564null可以转换成任何类的对象 -
java 线程的几个方法
2012-01-17 15:39 1002Thread的方法 sleep() 1. sleep ()函 ... -
java 线程
2012-01-17 14:37 740现在的系统的都是分时系统,达到多进程的效果。cpu只是将时间 ... -
java 访问修饰符
2012-01-12 10:34 732对于类成员(字段和方法)的访问权限来说, public:所有类 ... -
设计模式初学
2012-01-10 17:39 691代理模式只是原来对象的一个替身(原来对象约束了代理的行为) ... -
jndi学习
2012-05-26 19:10 724jndi--命名和目录服务api 用于查找远程的资源,例如 ... -
java 泛型学习--类型擦除
2011-12-26 17:58 1733类型擦除(type erasure)。 Java中的泛型基本上 ... -
java 泛型学习--泛型方法
2011-12-26 17:30 951通过在类的定义中添加 ... -
java 泛型学习--类型通配符
2011-12-26 17:17 894假设您具有该方法: void printList(Lis ... -
java 泛型学习
2011-12-26 16:42 774除了异常类型、枚举或匿名内部类以外,任何类都可以具有类型参数。 ... -
servlet path学习
2011-12-22 15:40 952servlet path就是取从context path后开始 ... -
log4j 学习
2011-12-16 11:01 952Log4j除了可以记录程序 ... -
java 可变长参数
2011-12-15 15:15 336[size=x-large] java 的可变长参数 例如: ... -
velocity性能优化
2011-12-09 11:16 9501.char to byte 字符转变字节,流用字节去输出 ... -
velocity 宏
2011-12-12 19:16 11251.方法当作参数化 当使用引用作为参数传递给Velocity ... -
ThreadLocal
2011-11-10 14:48 687每个线程有一个ThreadLocalMap对象,这是一个Map ... -
struts2 Codebehind Plugin
2011-11-08 15:32 3281.为未定义的action指定mapping When no ...
相关推荐
### Java垃圾回收机制详解 #### 一、引言 Java作为一种高级编程语言,自问世以来便因其自动内存管理和垃圾回收机制而备受青睐。本篇文章旨在深入探讨Java垃圾回收(Garbage Collection, GC)机制的工作原理及其...
Java垃圾回收器(Garbage Collector, GC)是Java编程语言中的一个重要特性,它负责自动管理内存,自动回收不再使用的对象,以防止内存泄漏。在Java中,程序员无需手动释放内存,这一过程由JVM(Java虚拟机)自动完成...
### Java垃圾回收详解 #### 垃圾回收基础概念 在Java编程语言中,垃圾回收(Garbage Collection, GC)是一项自动化的内存管理机制。它能够自动检测并释放那些不再被程序使用的对象所占用的内存空间,从而有效地...
### Java垃圾回收及内存泄漏知识点详解 #### 一、Java内存管理 1. **运行时数据区**:Java虚拟机管理的内存主要分为以下几个部分: - **方法区(Method Area)**:存储类的信息(如类名、字段、方法等)、常量、...
Java垃圾回收机制(GC)是Java编程语言的关键特性,它自动管理内存,释放不再使用的对象,以防止内存泄漏。GC的运作方式主要有两种策略:引用计数和对象引用遍历。 引用计数是一种简单但不完美的方法。每个对象都有...
Java垃圾回收机制是Java编程中一个非常重要的概念,尤其在面试和实际开发中常常被讨论。垃圾回收(Garbage Collection, GC)是Java虚拟机自动管理内存的一种方式,旨在自动识别并释放不再使用的对象,从而避免内存...
Java垃圾回收(GC)机制是Java语言管理内存的自动化机制,它能够自动释放不再使用的内存空间,从而避免内存泄漏和程序崩溃等问题。在介绍Java GC机制之前,我们首先要了解垃圾回收的目的和意义。在任何程序中,内存...
Java垃圾回收机制详解和调优.doc Java垃圾回收机制详解和调优.doc Java垃圾回收机制详解和调优.doc Java垃圾回收机制详解和调优.doc Java垃圾回收机制详解和调优.doc Java垃圾回收机制详解和调优.doc Java垃圾回收...
### Java垃圾回收原理详解 #### 一、引言 在现代软件开发中,Java作为一种广泛使用的编程语言,其垃圾回收机制是确保程序高效运行的关键技术之一。本文将深入探讨Java中的垃圾回收机制,包括其基本原理、不同类型...
Java中类的生命周期与java垃圾回收机制
Java垃圾回收机制的详细介绍,调理比较清晰,个人进行的总结。
【Java面试题】Java垃圾回收机制
Java垃圾回收机制是Java虚拟机(JVM)中一个至关重要的功能,它负责自动管理内存,释放不再使用的对象,防止内存泄漏,从而优化程序性能。本文将深入探讨Java垃圾回收的相关知识点。 首先,GC(Garbage Collection...
Java垃圾回收机制总结 Java垃圾回收机制是Java虚拟机(JVM)中的一种机制,用于防止内存泄露和有效地使用空闲的内存。垃圾回收机制的主要目的是为了回收无用的对象占用的内存空间,使该空间可被程序再次使用。 ...
Java垃圾回收(Garbage Collection, GC)是Java编程语言中一个重要的特性,它自动管理程序运行过程中的内存分配和释放,避免程序员手动处理内存管理,从而减少错误和提高程序的可维护性。以下是对Java垃圾回收的深入...
Azul Systems CTO & co-Founder, Gil Tene 在SpringOne2GX 2012大会上发表的演讲资料,全面深入地阐述Java垃圾回收的四种机制。并介绍了当今世界上性能与吞吐量最高的JVM产品Zing JVM。 如果希望深入了解Java的垃圾...