java垃圾回收浅析

简介: java垃圾回收浅析

知识点:Java语言的垃圾回收🌍

💭1.垃圾回收机制的基本概念


问:1.什么是Java垃圾回收?

答:在Java语言的生命周期中,Java运行环境提供了一个系统的垃圾回收器线程,负责自动回收那些没有引用与之相连的对象所占用的内存。这种清楚无用对象进行内存回收的过程叫做垃圾回收。

问:2.Java垃圾回收的作用是什么?

答:垃圾回收是Java语言提供的一种自动内存回收的功能,可以让程序员减轻内存管理的负担,同时减少了很多错误的出现。

问:3.Java垃圾回收的方法是什么?

答: 在一个类的实例化对象创建时,Java虚拟机JVM会自动给该对象分配内存,调用该对象的构造方法并开始跟踪该对象。当该对象停止使用时,JVM会通过垃圾回收器回收该对象所占的内存。

问:4.那么,Java是如何知道一个对象没有用的呢?

答:因为系统中的每一个对象都有一个引用计数器,如果一个对象被引用一次,引用计数器相应的加1,减少一次引用,相应的引用计数器减1,以此类推,如果一个对象的引用计数器为0,则说明这个对象该回收了。

💐💐--分割线--💐💐


💿实例代码段:

Student stu = new Student("张 三",18);
Student stu2=stu;
stu=null;
stu2=new Student("李四",20);
image.gif

💿思路:

image.gif

image.gif

💐💐--分割线--💐💐


  • 📂当然除了引用计数法判断对象是否存活,还有很多的算法去判断。例如可达性算法。虽然引用计数法原理简单,判断效率高但是同样存在很多的缺陷。例如对象的循环引用时计数器无法判断等。
//循环引用示例
public class Student{
    String name;
    Student friend;
    public static void main(String[] args){
        Student s1 = new Student();
        Student s2 = new Student();
        s1.friend = s2;
        s2.friend = s1;
        s1 = null;
        s2 = null;
    }
}
//s1和s2相互引用对方,导致它们引用计数不为0,但是实际已是无用对象,但是无法被识别。
image.gif

💭2.Java垃圾回收机制的好处

  1. 📂很好的解决了对内存的一些操作问题,包括追踪,监测,释放。
  2. 📂防止系统内存被非法释放,更加稳定安全。

💭3.Java垃圾回收机制的特点

  • 📂只有一个变量不被任何引用类型的变量使用时,它所占用的内存才会被垃圾回收器回收。

💿例如:

String str1="HelloWorld!";
String str2=str1;
str1=null;
str2=new String("HelloJava");
image.gif

💿程序运行到第三行时,"Helloworld!"对象仍然被str2引用,所以不会被垃圾回收器回收。只有当str2引用了一个新的对象时,此时该对象被当作垃圾被回收,例如以上程序运行到第四行的时候。

  • 📂不能通过程序强迫垃圾回收器立即执行

💿在任何时候,程序员都不能通过程序强迫垃圾回收器立即执行,但是程序员可以通过调用System.gc()或者Runtime.gc()方法提示垃圾回收器对垃圾进行回收。但是这个方法只是提醒垃圾回收器对内存进行回收,并不一定会立即执行,它只是一个建议并非命令。

  • 📂当垃圾回收器将要释放无用内存时,先调用对象的finalize()方法

当然,在Java语言中,垃圾的回收是由系统完成的,但是,有一些任务例如清理非内存资源,这些任务也可以通过覆盖Object类的finalize()方法来实现。

💿形式:

protected void finalize() throws Throwable
image.gif
  • 📂程序可能到运行结束都没有执行垃圾回收

💿如果一个程序只占用少量的内存,没有造成严重的内存需求,于是垃圾回收器没有释放这些对象的内存就退出了。即虽然程序员定义了finalize()方法,JVM不一定调用它,然后调用System.gc提供内存回收的建议也不会起作用。因此很难保证使用该方法来释放资源是安全有效的。

💐💐--分割线--💐💐


💿代码示例:

//filename:GcTest.java
public class GcTest
{
  public static void main(String[] args)
  {
      new GcTest();
      // 下面两行代码的作用完全相同,强制系统进行垃圾回收
      // System.gc();
      Runtime.getRuntime().gc();
  }
  public void finalize()
  {
    System.out.println("系统正在清理GcTest对象的资源...");
  }
}
image.gif      

🌍总结

  • 📂Java的垃圾回收机制,是C++/C语言的一个重要的区别,既减轻了手动释放垃圾内存的压力,又解决了错误释放引起的安全问题!
  • 📂作为Java开发者,一般不需要专门编写内存回收和垃圾清理代码,对内存泄露和溢出的问题,也不需要像C程序员那样严格,Java垃圾回收机制根据一定的回收策略,自动的回收内存,永不停息的保证JVM中的内存空间,防止出现内存泄露和溢出问题。
相关文章
|
27天前
|
监控 算法 Java
Java虚拟机(JVM)的垃圾回收机制深度解析####
本文深入探讨了Java虚拟机(JVM)的垃圾回收机制,旨在揭示其背后的工作原理与优化策略。我们将从垃圾回收的基本概念入手,逐步剖析标记-清除、复制算法、标记-整理等主流垃圾回收算法的原理与实现细节。通过对比不同算法的优缺点及适用场景,为开发者提供优化Java应用性能与内存管理的实践指南。 ####
|
19天前
|
监控 算法 Java
Java虚拟机(JVM)垃圾回收机制深度剖析与优化策略####
本文作为一篇技术性文章,深入探讨了Java虚拟机(JVM)中垃圾回收的工作原理,详细分析了标记-清除、复制算法、标记-压缩及分代收集等主流垃圾回收算法的特点和适用场景。通过实际案例,展示了不同GC(Garbage Collector)算法在应用中的表现差异,并针对大型应用提出了一系列优化策略,包括选择合适的GC算法、调整堆内存大小、并行与并发GC调优等,旨在帮助开发者更好地理解和优化Java应用的性能。 ####
25 0
|
18天前
|
存储 监控 算法
Java虚拟机(JVM)垃圾回收机制深度解析与优化策略####
本文旨在深入探讨Java虚拟机(JVM)的垃圾回收机制,揭示其工作原理、常见算法及参数调优方法。通过剖析垃圾回收的生命周期、内存区域划分以及GC日志分析,为开发者提供一套实用的JVM垃圾回收优化指南,助力提升Java应用的性能与稳定性。 ####
|
22天前
|
机器学习/深度学习 监控 算法
Java虚拟机(JVM)的垃圾回收机制深度剖析####
本文深入探讨Java虚拟机(JVM)的垃圾回收机制,揭示其工作原理、常见算法、性能调优策略及未来趋势。通过实例解析,为开发者提供优化Java应用性能的思路与方法。 ####
31 1
|
25天前
|
监控 算法 Java
Java虚拟机垃圾回收机制深度剖析与优化策略####
【10月更文挑战第21天】 本文旨在深入探讨Java虚拟机(JVM)中的垃圾回收机制,揭示其工作原理、常见算法及参数调优技巧。通过案例分析,展示如何根据应用特性调整GC策略,以提升Java应用的性能和稳定性,为开发者提供实战中的优化指南。 ####
40 5
|
23天前
|
算法 Java 开发者
Java内存管理与垃圾回收机制深度剖析####
本文深入探讨了Java虚拟机(JVM)的内存管理机制,特别是其垃圾回收机制的工作原理、算法及实践优化策略。不同于传统的摘要概述,本文将以一个虚拟的“城市环卫系统”为比喻,生动形象地揭示Java内存管理的奥秘,旨在帮助开发者更好地理解并调优Java应用的性能。 ####
|
1月前
|
缓存 算法 Java
本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制
在现代软件开发中,性能优化至关重要。本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制。通过调整垃圾回收器参数、优化堆大小与布局、使用对象池和缓存技术,开发者可显著提升应用性能和稳定性。
48 6
|
15天前
|
存储 监控 算法
Java内存管理的艺术:深入理解垃圾回收机制####
本文将引领读者探索Java虚拟机(JVM)中垃圾回收的奥秘,解析其背后的算法原理,通过实例揭示调优策略,旨在提升Java开发者对内存管理能力的认知,优化应用程序性能。 ####
29 0
|
1月前
|
监控 算法 Java
深入理解Java的垃圾回收机制
【10月更文挑战第22天】在Java的世界里,有一个默默无闻却至关重要的角色——垃圾回收(Garbage Collection, GC)。就像城市的清洁工一样,它默默地清理着不再使用的内存空间,确保我们的程序运行得既高效又稳定。但你真的了解垃圾回收是如何工作的吗?让我们一起探索这个看似简单却充满奥秘的过程,看看它是如何影响你的Java应用性能的。
|
28天前
|
监控 算法 Java
深入理解Java虚拟机(JVM)的垃圾回收机制
【10月更文挑战第21天】 本文将带你深入了解Java虚拟机(JVM)的垃圾回收机制,包括它的工作原理、常见的垃圾收集算法以及如何优化JVM垃圾回收性能。通过本文,你将对JVM垃圾回收有一个全新的认识,并学会如何在实际开发中进行有效的调优。
41 0
下一篇
DataWorks