java——GC回收机制

1. GC是什么?

GC(Gabage Collection):java的垃圾回收机制的根本目的就是跟踪正在使用的对象,然后回收那些不再使用(引用)的对象。java的GC回收机制有两个好处:

(1) 避免垃圾过多导致的内存耗尽

(2) 避免不恰当的内存释放导致的内存非法引用

GC主要是对JVM中的堆对象进行识别,如果对象正在被引用,就是活对象。否则就是死的,是可以被回收再分配的。

2. java的内存是如何存储的哪?

堆:用来存储java中创建的对象,new新建的对象都存在java的堆中

栈:用来存储java中对象的引用,常见的变量,static变量,final变量等等,除了对象外基本都在这里存储

3. GC触发的条件是什么?是否可以人为操控?

JVM中GC也分为两种,一种是主GC,一种是次GC,主GC的线程优先级最低,因此很少被触发。而次GC的线程触发的频率就比较高了。

主GC触发的两种条件

(1) 主GC的线程优先级非常低,因此只有在程序空闲的时候才会被调用,当然第2个条件除外

(2) 当java堆内存已经不足时,GC会被调用。而且如果GC一次后仍不能满足内存分配,JVM会再进行两次GC作进一步尝试,如果还是无法新建对象,JVM会报out of memory错误,java程序会推出。

然而由于GC是java自己的垃圾回收机制,因此认为编写代码是不能够处理的,不过可以认为调用system.gc(),提醒调用,不过依然无法影响对象的回收顺序以及回收时间。另外,java中的主GC是JVM根据环境来决定的,因此合适运行GC,是无法确定的。但一定是反复进行的

4. 如何减少GC的开销哪?基本原则是尽量减少垃圾

(1) 减少人工干预,也就是人工调用System.gc()。虽然上述已经说过人工干预只是建议,但的确可能会触发主GC,增加停顿次数

(2) 尽量少使用 static 定义的静态全局变量,静态全局变量不会被GC回收,而是一直占用内存

(3) 多使用int,long,float等基本数据类型,少创建相应的Integer等对象,减少内存占用。同样多使用StringBuffer,少使用String,因为String在进行操作时会创建很多String对象。

(4) 避免突然创建大量对象或者突然删除大量对象,这两种操作都可能会触发GC

(5) 减少临时对象的使用,减少垃圾,或者在对象使用完成后,显示地设置为NULL,方便GC进行直接回收

时间: 2024-10-21 07:39:17

java——GC回收机制的相关文章

Java GC回收机制

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

成为Java GC专家(3)—如何优化Java垃圾回收机制

本文作者: ImportNew - 王晓杰 未经许可,禁止转载! 本文是成为Java GC专家系列文章的第三篇.在第一篇<成为JavaGC专家Part I — 深入浅出Java垃圾回收机制>中我们学习了不同GC算法的执行过程,GC是如何工作的,什么是新生代和老年代,你应该了解的JDK7中的5种GC类型,以及这5种类型对于应用性能的影响. 在第二篇<成为JavaGC专家Part II — 如何监控Java垃圾回收机制>,我解释了JVM实际上是如何执行垃圾回收的,我们如何监控GC,以及

Java垃圾回收机制(GC)详解

Java垃圾回收机制(GC)详解 简介: 垃圾回收GC(Garbage Collection)是Java语言的核心技术之一,之前我们曾专门探讨过Java 7新增的垃圾回收器G1的新特性,但在JVM的内部运行机制上看,Java的垃圾回收原理与机制并未改变.垃圾收集的目的在于清除不再使用的对象.GC通过确定对象是否被活动对象引用来确定是否收集该对象.GC首先要判断该对象是否是时候可以收集.两种常用的方法是引用计数和对象引用遍历. 垃圾收集的算法分析: Java语言规范没有明确地说明JVM使用哪种垃圾

Java 内存回收机制——GC机制

一.Java GC 概念说明 Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代码,对内存泄露和溢出的问题,也不需要像C程序员那样战战兢兢.这是因为在Java虚拟机中,存在自动内存管理和垃圾清扫机制.概括地说,该机制对JVM(Java Virtual Machine)中的内存进行标记,并确定哪些内存需要回收,根据一定的回收策略,自动的回收内存,永不停息(Nerver St

Java深度历险(四)——Java垃圾回收机制与引用类型

Java语言的一个重要特性是引入了自动的内存管理机制,使得开发人员不用自己来管理应用中的内存.C/C++开发人员需要通过malloc/free 和new/delete等函数来显式的分配和释放内存.这对开发人员提出了比较高的要求,容易造成内存访问错误和内存泄露等问题.一个常见的问题是会产生“悬挂引用(dangling references)”,即一个对象引用所指向的内存区块已经被错误的回收并重新分配给新的对象了,程序如果继续使用这个引用的话会造成不可预期的结果.开发人员有可能忘记显式的调用释放内存

Java垃圾回收机制以及内存泄漏

原文地址 前言 在segmentfault上看到一个问题:java有完善的GC机制,那么在java中是否会出现内存泄漏的问题,以及能否给出一个内存泄漏的案例.本问题视图给出此问题的完整答案. 垃圾回收机制简介 在程序运行过程中,每创建一个对象都会被分配一定的内存用以存储对象数据.如果只是不停的分配内存,那么程序迟早面临内存不足的问题.所以在任何语言中,都会有一个内存回收机制来释放过期对象的内存,以保证内存能够被重复利用. 内存回收机制按照实现角色的不同可以分为两种,一种是程序员手动实现内存的释放

Java内存回收机制

深入理解 Java 垃圾回收机制 一:垃圾回收机制的意义 java  语言中一个显著的特点就是引入了java回收机制,是c++程序员最头疼的内存管理的问题迎刃而解,它使得java程序员在编写程序的时候不在考虑内存管理.由于有个垃圾回收机制,java中的额对象不在有"作用域"的概念,只有对象的引用才有"作用域".垃圾回收可以有效的防止内存泄露,有效的使用空闲的内存: 内存泄露:指该内存空间使用完毕后未回收,在不涉及复杂数据结构的一般情况下,java的内存泄露表现为一个

Java垃圾回收机制--入门

Java垃圾回收机制(gc) 在程序运行过程中,每创建一个对象都会被分配一定的内存用以存储对象数据.如果一味的去占用内存而不释放,则会遇到内存溢出的问题. 在程序运行的过程中,gc会用引用计数法去统计对象被多少其他对象持有,如果对象已经没有被引用,那么该对象转变为可复活状态 (对于gc线程来说对象有三种状态: 1.     可触及状态:程序中还有变量引用,那么此对象为可触及状态. 2.     可复活状态:当程序中已经没有变量引用这个对象,那么此对象由可触及状态转为可复活状态.CG线程将在一定的

【Java】Java垃圾回收机制

Java垃圾回收机制 说到垃圾回收(Garbage Collection,GC),很多人就会自然而然地把它和Java联系起来.在Java中,程序员不需要去关心内存动态分配和垃圾回收的问题,这一切都交给了JVM来处理.顾名思义,垃圾回收就是释放垃圾占用的空间,那么在Java中,什么样的对象会被认定为“垃圾”?那么当一些对象被确定为垃圾之后,采用什么样的策略来进行回收(释放空间)?在目前的商业虚拟机中,有哪些典型的垃圾收集器?下面我们就来逐一探讨这些问题.以下是本文的目录大纲: 一.如何确定某个对象