`

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

阅读更多

Weak引用对象与Soft引用对象的最大不同就在于:GC在进行回收时,需要通过算法检查是否回收Soft引用对象,而对于Weak引用对象,GC总是进行回收。Weak引用对象更容易、更快被GC回收。虽然,GC在运行时一定回收Weak对象,但是复杂关系的Weak对象群常常需要好几次GC的运行才能完成。Weak引用对象常常用于Map结构中,引用数据量较大的对象,一旦该对象的强引用为null时,GC能够快速地回收该对象空间。

  Phantom引用的用途较少,主要用于辅助finalize函数的使用。Phantom对象指一些对象,它们执行完了finalize函数,并为不可达对象,但是它们还没有被GC回收。这种对象可以辅助finalize进行一些后期的回收工作,我们通过覆盖Reference的clear()方法,增强资源回收机制的灵活性。

  一些Java编码的建议

  根据GC的工作原理,我们可以通过一些技巧和方式,让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程序的暂停时间。

分享到:
评论

相关推荐

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

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

    最新的java程序员不可不学的java基础教程

    8. **垃圾回收(GC)**:Java的自动内存管理是其一大优势,理解GC的工作原理和调优策略,有助于编写出性能更优的程序。 9. **泛型**:泛型引入了类型参数的概念,提高了代码的类型安全性和重用性。学习泛型的声明、...

    java程序员面试题

    Java程序员面试是一个全面检验开发者技能和知识深度的过程。面试题通常涵盖多个方面,包括但不限于基础...在准备面试的过程中,不仅要理解理论,还要通过实践加深理解和应用,这样才能真正成为一位优秀的Java程序员。

    java程序员到架构师之路

    3. **JVM深入理解**:了解JVM的工作原理,包括类加载机制、内存模型(堆、栈、方法区等)、垃圾回收机制(GC)以及性能调优。 4. **Spring框架**:Spring是Java开发的核心,需要掌握IoC(控制反转)、AOP(面向切面...

    java程序员面试题整理

    Java程序员面试是一个全面检验开发者技能、经验和解决问题能力的过程。这份面试题整理涵盖了多个核心领域,...同时,不断关注技术动态,学习新技术和新框架,提升自身的技术广度和深度,也是成为优秀Java程序员的关键。

    一个JAVA程序员面试32问

    以上这些知识点是Java程序员面试中常见的问题,理解并掌握它们对于成为一名优秀的Java开发者至关重要。在实际面试中,面试官可能会深入探讨这些话题,例如追问内部类的工作原理,垃圾收集的策略,或者是更复杂的并发...

    Java 程序员所需要掌握的核心知识

    8. **JVM原理**:理解Java虚拟机的工作原理,包括内存模型(如堆、栈、方法区)、垃圾回收机制(如分代收集、引用类型和GC算法)、类加载机制,可以帮助优化程序性能并减少内存泄漏。 9. **泛型**:泛型提供了一种...

    JAVA程序员试题

    9. **JVM内存管理**:Java的垃圾回收机制使得程序员无需手动管理内存,但理解堆内存、栈内存、方法区、常量池等区域的划分,以及GC(Garbage Collector)的工作原理,有助于优化程序性能和避免内存泄漏。 10. **...

    面向GC的Java编程Java开发Java经验技巧共7页

    面向GC的编程是优化Java应用程序性能的关键环节,特别是对于大规模系统或者内存敏感的应用,理解并掌握GC的工作原理与最佳实践至关重要。下面将详细介绍面向GC的Java编程以及相关的开发经验技巧。 1. **理解Java...

    程序员成长学习要求

    1. **JVM与GC**:深入了解JVM的工作原理,包括内存模型、垃圾回收机制等,这对于优化Java应用性能至关重要。 2. **Spring框架**: - **Spring Bean管理**:掌握Bean的生命周期管理、依赖注入等基本概念。 - **...

    java知识图谱.rar

    GC的原理、类型(如Minor GC、Major GC、Full GC)和调优策略是Java开发者必须掌握的知识。了解不同GC算法(如串行、并行、CMS、G1、ZGC等)的优缺点,有助于在实际应用中选择合适的策略。 3. **Java设计模式**: ...

    你必须知道的261个java语言问题

    本书结构清晰、讲解透彻、实用性强,是各高校相关专业Java语言课程很好的教学参考书,也是各层次Java程序员的优秀实践指南。 本书以问答的形式组织内容,讨论了学习或使用Java语言的过程中经常遇到的一些问题。这些...

    北大高科java测试题

    【北大高科Java测试题详解】 Java编程语言作为软件开发领域的主流工具,其深度和广度都相当广泛。北大高科的Java测试题通常涵盖了...通过深入理解和实践这些知识点,可以为成为一名优秀的Java程序员奠定坚实的基础。

    JAVA 面试题总览(书签完整版).zip_java_java 面试_things

    面试者需要了解堆内存、栈内存、方法区的区别,以及GC(垃圾收集器)的工作原理和调优策略。JVM(Java虚拟机)的运行机制和参数配置也是常考内容。 此外,线程和并发编程是Java面试中的难点。面试者需要理解线程的...

    java基础学习与进阶

    最后,深入学习Java虚拟机(JVM)的工作原理,包括内存管理(堆、栈、方法区等)、垃圾回收(GC)机制,以及性能优化技巧,对于成为一名优秀的Java开发者至关重要。 在实际项目中,你还需要了解Maven或Gradle构建...

    Java编程精选集锦_(电脑编程技巧与维护)

    了解如何有效地处理异常可以提高程序的健壮性,而理解GC的工作原理有助于优化性能。 最后,书中可能还会提及一些进阶话题,如Java虚拟机(JVM)的工作原理、性能调优技巧、泛型、Lambda表达式、反射以及Java 8及更...

    实战JAVA虚拟机 JVM故障诊断与性能优化

    《实战JAVA虚拟机 JVM故障诊断与性能...以上内容是《实战JAVA虚拟机 JVM故障诊断与性能优化》可能涉及的主要知识点,深入学习和实践这些内容,能帮助开发者成为更优秀的Java程序员,有效地处理各种JVM相关的复杂问题。

    精品--JAVA 面试宝典和简历模板V3.zip

    简历制作方面,一份优秀的Java程序员简历应包含以下要点: 1. **个人信息**:清晰的姓名、联系方式、邮箱地址。 2. **项目经验**:突出你在实际项目中的角色、所用技术、项目规模和贡献。 3. **技能清单**:列出...

Global site tag (gtag.js) - Google Analytics