Java 垃圾回收

1 什么是Java 垃圾回收

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

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

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

2 Java 垃圾回收的优势

它使Java内存更加高效,因为垃圾回收器从堆内存中删除了未引用的对象。

它由垃圾收集器(JVM的一部分)自动完成,因此我们无需付出额外的工作。

3 如何取消对象引用

有很多方法可以取消对应引用:

通过取消引用

通过分配对另一个的引用

通过匿名对象

3.1 通过取消引用

Employee e=new Employee();

e=null;

3.2 通过分配对另一个的引用

Employee e1=new Employee();

Employee e2=new Employee();

e1=e2;//now the first object referred by e1 is available for garbage collection

3.3 通过匿名对象

new Employee();

4 finalize()方法

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

protected void finalize(){}

注意:JVM的垃圾收集器仅收集那些由new关键字创建的对象。因此,如果您创建了不是使用new的任何对象,则可以使用finalize方法执行清理操作(销毁这些对象)。

5 gc()方法

gc() 方法用于调用垃圾收集器以执行清理操作。gc() 定义在System和Runtime类中。

public static void gc(){}

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

6 Java 垃圾回收的例子

package com.yiidian;

/**

* 一点教程网: http://www.yiidian.com

*/

/**

* Java 垃圾回收的例子

*/

public class Demo{

public void finalize(){

System.out.println("object is garbage collected");

}

public static void main(String args[]){

Demo s1=new Demo();

Demo s2=new Demo();

s1=null;

s2=null;

System.gc();

}

}

输出结果为:

object is garbage collected

object is garbage collected

注意:终结和垃圾收集都不被保证的。

java 多线程垃圾回收_Java 垃圾回收相关推荐

  1. java 强制垃圾回收_Java垃圾回收机制

    Java垃圾回收机制 垃圾回收机制用到finalize.当程序创建对象.数组等引用类型实体时,系统都会在堆内存中为之分配一块内存区,对象就保存在这块内存中,当这块内存不再被任何引用变量引用时,这块内存 ...

  2. java list clear 垃圾回收_java垃圾回收机制

    1.什么是垃圾回收? 程序的运行必然需要申请内存资源,无效的对象资源如果不及时处理就会一直占有内存资源,最终将导数内存溢出,所以内存资源的管是非常重要了. 1.1.C/C++语言的垃圾回收 在C/C+ ...

  3. java 静态数组 垃圾回收_java垃圾回收

    参考文献: 1.垃圾收集算法的核心思想 Java语言建立了垃圾收集机制,用以跟踪正在使用的对象和发现并回收不再使用(引用)的对象.该机制可以有效防范动态内存分配中可能发生的两个危险:因内存垃圾过多而引 ...

  4. java 内存 回收_java内存回收

    一.为什么需要垃圾回收 如果不进行垃圾回收,内存迟早都会被消耗空,因为我们在不断的分配内存空间而不进行回收.除非内存无限大,我们可以任性的分配而不回收,但是事实并非如此.所以,垃圾回收是必须的. 二. ...

  5. java多线程 cpu分配_java多线程总结(转载)

    Java 多线程编程总结 --------------------------------------------------------------------------------------- ...

  6. java多线程死锁代码_java多线程死锁 编写高质量代码:改善Java程序的151个建议...

    java多线程死锁 编写高质量代码:改善Java程序的151个建议 第1章 Java开发中的通用方法和准则 建议1:不要在常量和变量中出现易混淆的字母 建议2:莫让常量蜕变成变量 建议3:三元操作符的 ...

  7. java 多线程并发 问题_JAVA多线程和并发基础面试问答

    原文链接 译文连接作者:Pankaj  译者:郑旭东  校对:方腾飞 多线程和并发问题是Java技术面试中面试官比较喜欢问的问题之一.在这里,从面试的角度列出了大部分重要的问题,但是你仍然应该牢固的掌 ...

  8. java多线程 生产者消费者_java多线程之-生产者与消费者

    java多线程之-并发协作[生产者与消费者]模型 对于多线程程序来说,不管c/c++ java python 等任何编程语言,生产者与消费者模型都是最为经典的.也就是可以说多线程的并发协作 对于此模型 ...

  9. java多线程总结图_Java多线程总结之Queue

    标签:多线程(52)JAVA(605) 上个星期总结了一下synchronized相关的知识,这次将Queue相关的知识总结一下,和朋友们分享. 在Java多线程应用中,队列的使用率很高,多数生产消费 ...

  10. java 多线程下载器_Java多线程的下载器(1)

    实现了一个基于Java多线程的下载器,可提供的功能有: 1. 对文件使用多线程下载,并显示每时刻的下载速度. 2. 对多个下载进行管理,包括线程调度,内存管理等. 一:单个文件下载的管理 1. 单文件 ...

最新文章

  1. 类的operator new与operator delete的重载
  2. 机器学习笔记八:常见“距离”归纳
  3. python协程池操作mysql_在python中使用aiomysql异步操作mysql
  4. DAY9-字符串笔记整理2018-1-19
  5. 【LUOGU P1220】关路灯(区间dp)
  6. kubectl bash补全
  7. Java Review - Queue和Stack 源码解读
  8. python中常见的运行时错误_17个常见的Python运行时错误
  9. Service Worker 的一个实战例子
  10. sharepoint 2010 timejob 注意
  11. python怎么导入os模块_python之os模块
  12. (已解决)wamp + Apache报错:出现403Forbidden You don't have permission to access / on this server.
  13. 关于JavaScript的43道题①
  14. Shell 基本语法
  15. 七月算法机器学习 (16)人工神经网络
  16. 微信模板消息推送-模板再封装
  17. 2022Java学习笔记十二(数组的遍历,数组遍历求和,数组排序,数组随机排名案例,数组猜数字游戏案例,数组求最大值案例,数据遍历求和案例)
  18. 推荐一款待办事项和日程管理的微信小程序——腾讯待办
  19. 日语中的“上手”“下手”是什么意思?
  20. excel手机版_微软的新办公利器,这才是手机办公该有的亚子!

热门文章

  1. 2023上海国际民宿展与您相约7月5-7日,共启民宿升华之旅!
  2. 计算机科研 感悟1
  3. 短时傅里叶变换原理及其MATLAB实现(Short Time Fourier Transform,STFT)
  4. 实现国际化(中英文切换)
  5. Leetcode_53_Maximum Subarray
  6. 深度学习 3d人脸 重建_深度学习实时3D人脸跟踪
  7. 【面经】今天又一名读者斩获蚂蚁金服Offer,就是这么简单!!
  8. 官方文档——AlwaysOn AG的先决条件、限制和建议
  9. 从开发到销售:软件商如何管理你的典型客户
  10. 商业贷款和公积金贷款差多少?一组数据告诉你!