首页 > 编程语言 >Java垃圾收集

Java垃圾收集

时间:2024-05-29 09:34:09浏览次数:13  
标签:Java 收集 finalize 对象 垃圾 Employee new

在java中,垃圾意味着未引用的对象。

垃圾收集是自动回收运行时未使用内存的过程。 换句话说,它是一种销毁未使用对象的方法。

它类似于,在C语言中使用free()函数,在C++中使用delete()。 但是,在java中这些会自动执行。因此,java提供了更好的内存管理。

垃圾收集的好处

  • 它使java内存有效,因为垃圾收集器从堆内存中删除未引用的对象。
  • 它由垃圾收集器(JVM的一部分)自动完成,因此开发人员不需要额外的工作。

如何对象不被引用?

有以下几个方法:

  • 通过归零引用
  • 通过为另一个分配引用
  • 通过匿名对象等
1. 通过归零引用:
Employee e=new Employee();  
e=null;

Java

2. 通过为另一个分配引用:
Employee e1=new Employee();  
Employee e2=new Employee();  
e1=e2;//now the first object referred by e1 is available for garbage collection

Java

3. 通过匿名对象:
new Employee();

Java

finalize()方法

每次在对象被垃圾回收之前调用finalize()方法。 此方法可用于执行清理处理。 此方法在Object类中定义为:

protected void finalize(){}

Java

注意 :JVM的垃圾收集器仅收集由new关键字创建的对象。 因此,如果创建了没有new的任何对象,则可以使用finalize方法执行清理处理(销毁剩余对象)。

gc()方法
gc()方法用于调用垃圾收集器以执行清理处理。 gc()可在SystemRuntime类中找到。

public static void gc(){}

Java

注意 :垃圾收集由称为垃圾收集器(GC)的守护程序线程执行。 此对象在对象被垃圾回收之前调用finalize()方法。

Java中垃圾收集的简单示例
public class TestGarbage1{  
     public void finalize(){System.out.println("object is garbage collected");}  
     public static void main(String args[]){  
          TestGarbage1 s1=new TestGarbage1();  
          TestGarbage1 s2=new TestGarbage1();  
          s1=null;  
          s2=null;  
          System.gc();  
     }  
}

Java

执行上面示例代码,得到以下结果:

object is garbage collected
object is garbage collected

Shell

注意 :无论是最终确定还是垃圾收集都不能保证。

标签:Java,收集,finalize,对象,垃圾,Employee,new
From: https://blog.csdn.net/unbelievevc/article/details/139252804

相关文章

  • (免费领源码)Java/Mysql数据库+01012大学生爱心互助代购网站,计算机毕业设计项目推荐上万
    摘 要在网络信息的时代,众多的软件被开发出来,给用户带来了很大的选择余地,而且人们越来越追求更个性的需求。在这种时代背景下,企业只能以用户为导向,按品种分类规划,以产品的持续创新作为企业最重要的竞争手段。系统采用了B/S结构,将所有业务模块采用以浏览器交互的模式,选择My......
  • (免费领源码)Java/Mysql数据库+00895springboot的校园二手书销售平台,计算机毕业设计项目
    本科学生毕业设计校园二手书销售平台设计与实现                院系名称:    计算机科学与技术学院    专业班级:                            学生姓名:                           ......
  • (免费领源码)Java/Mysql数据库+00750基于python的音乐电台推荐系统设计,计算机毕业设计项
    毕业设计(论文)Django音乐电台推荐系统学   院:                           专   业:                           年   级:                           姓   名:   ......
  • (免费领源码)Java/Mysql数据库+00485 个性化音乐推荐系统的设计与实现,计算机毕业设计项
    毕业设计(论文)NodeJS个性化音乐推荐系统学   院:                           专   业:                           年   级:                           姓   名:  ......
  • PowerMock入门:Java单元测试的终极武器
    在软件开发过程中,单元测试是确保代码质量的重要环节。它帮助开发者验证代码的各个部分是否按照预期工作,从而提高软件的稳定性和可维护性。然而,传统的单元测试工具,如JUnit和Mockito,虽然功能强大,但在某些场景下却显得力不从心。例如,它们在模拟静态方法、私有方法、构造函数以......
  • JavaScript日期与时间处理的艺术
    JavaScript日期与时间处理的艺术基础概念:JavaScript中的日期对象诞生时刻时间戳:纪元的秘密案例一:格式化日期的艺术美化你的日期自定义格式化案例二:跨时区的舞蹈时区转换案例三:时间旅行的挑战闰年与月份天数避免日期计算的陷阱实战技巧与避坑指南性能优化安全性考量问......
  • Java 17的新特性有哪些?
    Java17是Java编程语言的最新版本,于2021年9月14日发布。以下是Java17的一些新特性:Sealed类和接口:Sealed类和接口限制了继承和实现的范围,在编译时提供更强的封装性。Pattern匹配:Pattern匹配简化了对实例进行类型检查和转换的流程,使代码更加简洁和易读。垃圾收集器(G1)的......
  • 如何在Java中实现函数式编程?
    在Java中实现函数式编程的关键是使用Lambda表达式和函数式接口。下面是一个简单的示例,展示了如何使用Lambda表达式和函数式接口来实现函数式编程。首先,定义一个函数式接口,可以通过使用@FunctionalInterface注解来标记该接口为函数式接口。函数式接口只能包含一个抽象方法。......
  • springboot+vue+mybatis基于java web的公益网站的设计与实现+jsp+PPT+论文+讲解+售后
    现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本公益网站就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍......
  • Java三种方法实现多线程,继承Thread类,实现Runnable接口,实现Callable接口
    目录线程:继承Thread类:实现Runnable类:实现Callable接口:验证多线程:线程:定义:进程可以同时执行多个任务,每个任务就是线程。举个例子:一个Java程序,如果同时有两个循环同时进行,就是线程。再比如,你用百度网盘,边看视频,边下载。继承Thread类:步骤写在代码里的classmythrea......