`

java gc工作原理

    博客分类:
  • j2se
阅读更多

GC基本工作原理:

java内存的管理是对象的管理,就是对象的内存的分配和释放 ;

分配对象:一般情况使用new ,或使用类加载器ClassLoader  ;

释放对象:将对象的所有引用赋值为null ,让程序不可访问该对象, 该对象”不可达“,gc将回收所有不可达对象。

对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象

增量式GC( Incremental GC )

GC在JVM中通常是由一个或一组进程来实现的,它本身也和用户程序一样占用heap空间,运行时也占用CPU.当GC进程运行时,应用程序停止运行。因此,当GC运行时间较长时,用户能够感到 Java程序的停顿,另外一方面,如果GC运行时间太短,则可能对象回收率太低,这意味着还有很多应该回收的对象没有被回收,仍然占用大量内存。

详解finalize方法:

finalize方法属于Object类中的方法,其修饰符protected,所以所有类都可以访问该方法。由于,finalize函数没有自动实现链式调用,我们必须手动的实现,因此finalize函数的最后一个语句通常是super.finalize()。

根据Java语言规范,JVM保证调用finalize函数之前,这个对象是不可达的,但是JVM不保证这个函数一定会被调用。另外,规范还保证finalize函数最多运行一次。

通常,finalize用于一些不容易控制、并且非常重要资源的释放,例如一些I/O的操作,数据的连接。这些资源的释放对整个应用程序是非常关键的。在这种情况下,程序员应该以通过程序本身管理(包括释放)这些资源为主,以finalize函数释放资源方式为辅,形成一种双保险的管理机制,而不应该仅仅依靠finalize来释放资源。 程序如何与GC进行交互

三种引用类分别为SoftReference、WeakReference和 PhantomReference.通过使用这些引用类,程序员可以在一定程度与GC进行交互,以便改善GC的工作效率。这些引用类的引用强度介于可达对象和不可达对象之间。

SoftReference引用的对象:较强的引用,只有当内存不知时,GC才回收该对象,这些引用对象还能保证在Java抛出OutOfMemory 异常之前,被设置为null.它可以用于实现一些常用图片的缓存,实现Cache的功能,保证最大限度的使用内存而不引起OutOfMemory。

WeakReference引用的对象:GC在进行回收时,需要通过算法检查是否回收Soft引用对象,而对于Weak引用对象,GC总是进行回收。

Phantom 引用的用途较少,主要用于辅助finalize函数的使用

过覆盖Reference的clear()方法,增强资源回收机制的灵活性。

一些Java编码的建议

根据GC的工作原理,我们可以通过一些技巧和方式,让GC运行更加有效率,更加符合应用程序的要求。以下就是一些程序设计的几点建议。

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

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

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

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

分享到:
评论

相关推荐

    Java基础[Java基础]--Java GC工作原理

    通过对GC原理的理解和合理配置,开发者可以有效地管理Java应用的内存使用,提高应用的性能和稳定性。无论是增量式GC还是分代收集策略,都是为了更好地适应不同应用场景的需求,实现最优的内存管理方案。

    Java程序员必须了解的GC工作原理

    总的来说,理解Java的GC工作原理对于优化代码性能和解决内存问题至关重要。通过阅读源码、使用分析工具和调整JVM参数,Java程序员能够更深入地掌握GC,从而编写出更加高效和稳定的程序。同时,学习如Apache Mina这样...

    Java程序员必须了解GC的工作原理

    Java程序员必须了解GC的工作原理

    优秀的Java程序员必须了解GC的工作原理

    ### 优秀的Java程序员必须了解GC的工作原理 #### 一、GC的基本原理 Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是Java内存管理的关键组成部分。了解GC的工作原理对于优化Java程序至关重要,尤其是在...

    深入了解Java GC的工作原理

    深入了解Java GC的工作原理 Java GC(Garbage Collection)是Java虚拟机(JVM)中的一种自动内存管理机制。GC的主要任务是回收垃圾对象,以释放内存空间。下面我们将深入了解Java GC的工作原理。 JVM内存结构 JVM...

    优秀Java程序员必须了解的GC工作原理

    Java垃圾回收(GC)是Java编程中至关重要的一个部分,对于任何希望成为优秀Java程序员的人来说,理解其工作原理是必不可少的。GC的主要任务是自动管理内存,尤其是对象的分配和回收,以避免内存泄漏和资源浪费。在...

    Java_GC垃圾回收调优指南

    本指南旨在帮助开发者深入理解Java GC的工作原理,并提供一系列调优策略与实例,以确保Java应用能够高效稳定地运行。 #### Java GC基础知识 垃圾回收是一种自动化的内存管理机制,它负责回收不再使用的对象所占用...

    java虚拟机中gc的基本原理 .docx

    理解GC的基本原理对于优化Java应用的性能至关重要,尤其是在对性能要求较高的场景,如嵌入式系统和实时系统。 GC的基本原理主要涉及到对象的生命周期管理和内存的自动回收。当程序员通过`new`关键字创建一个对象时...

    Java GC 专题

    为了理解垃圾收集为什么会暂停JVM,首先需要了解Java中垃圾收集的工作原理。 Java虚拟机提供了多种垃圾收集算法,不同的JVM实现可能会使用不同的垃圾收集策略。理解这些垃圾收集策略对于优化垃圾收集行为,减少应用...

    JAVA 内存设置原理

    ### JAVA内存设置原理详解 在深入探讨JAVA内存设置原理之前,我们先理解一下JVM(Java虚拟机)的内存管理机制。JVM是JAVA运行时环境的核心,它负责执行JAVA字节码,同时管理程序运行时的内存分配与回收。JVM的内存...

    Java中GC的工作原理详细介绍

    GC的基本原理是基于对象的可达性分析。当一个对象不再有任何引用指向它,即成为“不可达”对象,GC就会识别并回收其占用的内存。Java中的内存主要分为堆(Heap)和栈,其中堆存储的是对象实例,而栈存储方法的局部...

    成为JavaGC专家PartII-如何监控Java垃圾回收

    在Java编程语言中,垃圾回收(Garbage Collection, GC)是一项至关重要的机制,它自动...通过深入理解GC的工作原理,调整合适的GC策略,以及优化代码,开发者可以提升应用的性能和稳定性,成为一名真正的Java GC专家。

    Java 内存区域和GC机制

    本文将深入探讨Java虚拟机(JVM)中的内存划分、垃圾收集的工作原理以及相关工具的使用。 1. **Java内存区域** - **程序计数器**:每个线程都有一个独立的程序计数器,用于记录当前线程执行的字节码指令地址。 - ...

    Java垃圾回收原理

    Java的垃圾回收(Garbage Collection, GC)是一种自动化的内存管理方式,它能够自动识别并释放不再被引用的对象所占用的内存空间,从而避免了程序员手动管理内存带来的各种问题,如内存泄漏等。 ##### 2.2 堆与栈的...

    JavaGC专家指南.pdf

    JVM的调优是一个复杂的过程,需要深入了解JVM的工作原理和垃圾回收机制。调优的目的是提高应用程序的性能和稳定性。调优时会用到不同的工具和命令,例如JConsole、VisualVM、JProfiler等监控工具,以及JVM的命令行...

    Java虚拟机实现原理分析.pdf

    Java虚拟机(JVM)是实现Java程序跨平台运行的关键技术,它的实现原理和工作过程是Java语言能够运行在各种不同硬件平台的基础。JVM的存在使得Java程序员可以编写一次代码,到处运行,这得益于JVM提供的一套平台无关...

    java垃圾回收(gc)机制详解

    本文将深入探讨Java GC的工作原理、类型、过程以及优化策略。 一、Java垃圾回收的起源与目的 在C++等语言中,程序员需要手动管理内存,分配和释放内存空间。而在Java中,引入了垃圾回收机制,自动处理这些任务,...

    Java VisualVM gc工具

    此外,VisualVM的GC插件还可以帮助开发者理解不同垃圾收集器的工作原理和设置选项。Java提供了多种GC策略,如Serial、Parallel、Concurrent Mark Sweep (CMS) 和G1等,每种策略在不同的场景下有不同的性能表现。通过...

Global site tag (gtag.js) - Google Analytics