`

Java内存管理基础篇 - Java内存回收-常见的垃圾回收策略

阅读更多

Java的内存使用完之后,是通过JVM的GC进行回收的。


1 概述

 

垃圾收集的目的在于清除不再使用的对象。gc通过确定对象是否被活动对象引用来确定是否收集该对象。gc首先要判断该对象是否是时候可以收集。两种常用的方法是引用计数和对象引用遍历。

 

1.1引用计数(Reference Counting)

 

通过引用的次数来判断对象是否需要被回收。因为在循环引用时,容易出问题,因此在较新的JVM中被抛弃,这种策略只是在早期的JVM中使用过。

 

由下图可以看出,

Interger P = new Integer(); Integer对象的引用计数为1.

p=q;refCount加一=2;

 


 

缺点,无法解决循环引用的问题:

 


 

1.2. 对象引用遍历

 

对象引用遍历 指的是从一个根集出发,遍历对象图,跟踪可达到对象,并进行标记(mark),然后对不可达到对象进行清除。

这里的根集是指正在执行的Java程式能访问的引用变量的集合(包括局部变量、参数、类变量)

 

 


 

参考文献:

 

http://www.brpreiss.com/books/opus5/html/page423.html

 

2.几种垃圾回收机制

  2.1.标记-清除收集器

  这种收集器首先遍历对象图并标记可到达的对象,然后扫描堆栈以寻找未标记对象并释放它们的内存。这种收集器一般使用单线程工作并停止其他操作。

  2.2.标记-压缩收集器

  有时也叫标记-清除-压缩收集器,与标记-清除收集器有相同的标记阶段。在第二阶段,则把标记对象复制到堆栈的新域中以便压缩堆栈。这种收集器也停止其他操作。

  2.3.复制收集器

  这种收集器将堆栈分为两个域,常称为半空间。每次仅使用一半的空间,jvm生成的新对象则放在另一半空间中。gc运行时,它把可到达对象复制到另一半空间,从而压缩了堆栈。这种方法适用于短生存期的对象,持续复制长生存期的对象则导致效率降低。

  2.4.增量收集器

  增量收集器把堆栈分为多个域,每次仅从一个域收集垃圾。这会造成较小的应用程序中断。

  2.5.分代收集器

  这种收集器把堆栈分为两个或多个域,用以存放不同寿命的对象。jvm生成的新对象一般放在其中的某个域中。过一段时间,继续存在的对象将获得使用期并转入更长寿命的域中。分代收集器对不同的域使用不同的算法以优化性能。

  2.6.并发收集器

  并发收集器与应用程序同时运行。这些收集器在某点上(比如压缩时)一般都不得不停止其他操作以完成特定的任务,但是因为其他应用程序可进行其他的后台操作,所以中断其他处理的实际时间大大降低。

  2.7.并行收集器

  并行收集器使用某种传统的算法并使用多线程并行的执行它们的工作。在多cpu机器上使用多线程技术可以显著的提高java应用程序的可扩展性。

 


  • 大小: 1.5 KB
  • 大小: 3.3 KB
  • 大小: 11.5 KB
分享到:
评论

相关推荐

    java垃圾回收器代码举例

    Java垃圾回收器(Garbage Collector, GC)是Java编程语言中的一个重要特性,它负责自动管理内存,自动回收不再使用的对象,以防止内存泄漏。在Java中,程序员无需手动释放内存,这一过程由JVM(Java虚拟机)自动完成...

    Java内存分配及垃圾回收文章汇总

    本篇将深入探讨Java内存分配策略以及垃圾回收机制,以帮助你更好地理解和解决相关问题。 首先,我们来看JVM的内存结构。在JDK5.0中,JVM的堆内存被分为新生代(Young Generation)、老年代(Tenured Generation)和...

    Java语言程序设计-基础篇-进阶篇源码

    8. **JVM原理**:垃圾回收机制,内存模型,类加载器等JVM内部工作原理的介绍。 9. **设计模式**:常见的设计模式如工厂模式、单例模式、装饰者模式等在实际开发中的应用。 通过阅读和实践这些源码,开发者不仅可以...

    Java语言程序设计基础篇-英文讲义

    Java语言程序设计基础篇是学习Java编程的重要教材,尤其对于初学者来说,它提供了一个全面且深入的学习路径。英文讲义“Introduction to Java Programming-Comprehensive Version (6th Edition)”覆盖了从基本概念到...

    Sun_JDK_1.6内存管理--实现篇-毕玄

    总之,Sun JDK 1.6的内存管理机制是其高效运行的基础,通过采用各种先进的分配与回收策略,以及引入如JRockit这样的高性能JVM,极大地提升了Java应用程序的执行效率和稳定性。理解这些内存管理的具体实现,对于深入...

    JAVA程序员必读--基础篇chm

    Java基础篇的学习通常涵盖以下几个关键知识点: 1. **Java概述**:Java是由Sun Microsystems(现已被Oracle收购)开发的面向对象的编程语言,以其“一次编写,到处运行”的跨平台特性闻名。它基于C++语言,但设计上...

    Java面试题基础篇

    Java 面试题基础篇是面向Java开发人员的一份详细的面试题库,涵盖了 Java 的基础知识点,包括面向对象编程、变量作用域、事件委托机制、垃圾回收机制、序列化、排序算法、继承、多态、内部类、Collection 框架等。...

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

    在Java编程语言中,垃圾回收(Garbage Collection, GC)是一项至关重要的机制,它自动管理内存,释放不再使用的对象,防止内存泄漏。本篇将深入探讨如何监控Java的垃圾回收,帮助开发者提升应用性能和稳定性。 Java...

    JVM垃圾回收器和内存分配策略.zip

    Java虚拟机(JVM)是Java程序运行的基础,它的核心组成部分之一就是垃圾回收器(Garbage Collector, GC),以及内存分配策略。理解这些概念对于优化Java应用性能至关重要。本篇文章将深入探讨JVM的垃圾回收机制以及...

    Java语言程序设计-基础篇(原书第8版).

    从环境搭建到基础语法,再到面向对象编程的核心概念,本书《Java语言程序设计-基础篇》系统地介绍了Java编程的基础知识和技术要点。无论是初学者还是有一定经验的开发者,都能从中受益匪浅。通过实践和不断学习,...

    JAVA程序员必读--基础篇

    理解Java的自动内存管理,以及垃圾回收的工作原理。 以上只是Java基础知识的一部分,深入学习还需结合实际项目经验,不断探索和实践。"JAVA程序员必读--基础篇"的CHM文件应该包含了这些内容的详细讲解,是学习和...

    Java培训之基础篇 Java培训之基础篇

    - 垃圾回收器:Java自动管理内存,通过垃圾回收机制回收不再使用的对象,减轻程序员的负担。 3. Java开发环境配置 - 配置Java Development Kit(JDK),安装JRE(Java Runtime Environment)和设置环境变量如JAVA...

    java程序员必读--基础篇

    首先,我们要理解Java的特性,包括其跨平台性("Write Once, Run Anywhere"),垃圾回收机制,以及面向对象的设计理念。Java运行在Java虚拟机(JVM)上,使得程序可以在任何支持JVM的平台上运行,极大地提高了代码的...

    Java语言程序设计-基础篇(原书第8版)

    13. **Java的内存管理和垃圾回收**:Java的自动内存管理是其一大特点,书中会讲解如何理解和使用内存,以及垃圾回收的工作原理。 14. **Javadoc**:Java的文档生成工具,用于生成关于源代码的API文档,是编写可维护...

    2015-09-12-Java虚拟机详解----JVM常见问题总结【面试必问】

    Java虚拟机(JVM)是Java程序...了解并掌握这些JVM常见问题,不仅有助于解决实际开发中的性能问题,还能在面试中展现出深厚的Java基础。对于Java开发者来说,深入理解JVM的工作原理和调优策略是不可或缺的专业技能。

    垃圾回收算法与实现

    垃圾回收是计算机科学中的一项重要技术,它负责自动管理程序中的内存资源,解决内存泄漏、程序崩溃等问题。垃圾回收算法是实现垃圾回收的关键,它直接影响到程序的性能和资源利用效率。本书《垃圾回收的算法与实现》...

    Java Learning Path---资源篇

    接着,深入JVM(Java虚拟机)的内部工作机制,如内存管理、垃圾回收机制、类加载机制,将有助于优化程序性能。理解JVM调优参数,可以提升应用的运行效率。 Spring框架是企业级Java开发的标准,学习Spring Boot和...

    android-java-前端-面经-工具集合

    - **内存管理**:深入理解JVM(Java虚拟机),包括堆内存、栈内存、方法区的结构与管理,垃圾回收机制。 - **集合框架**:ArrayList、LinkedList、HashMap、HashSet等数据结构的实现原理及使用场景。 - **并发...

    Java语言程序设计-进阶篇-原书第8版

    9. Java内存模型和垃圾回收:了解Java内存模型的基本概念,理解垃圾回收机制以及如何通过代码优化提高内存使用效率。 10. 新特性探索:对于原书第8版来说,还可能涵盖了Java 8及以上版本的新特性,比如Lambda表达式...

    JVM调优总结(4)分代垃圾回收Java开发Java经验技

    本篇文章将详细讲解"JVM调优总结(4)分代垃圾回收"这一主题,旨在帮助Java开发者掌握更加高效、稳定的应用运行策略。 一、分代垃圾回收理论基础 Java的内存管理主要依靠垃圾回收机制,它自动回收不再使用的对象,...

Global site tag (gtag.js) - Google Analytics