转自CSDN博客。修复引用网易图片引起的图片丢失。

个人理解:

虽然不做任何操作,GC会自动回收 ArrayList 内部的对象和 ArrayList 自己本身占用的空间,但GC的时间无法确定,可能在程序运行结束后(对于要一直运行的服务肯定无法接受),也可能由JVM按照某种调度算法定时回收。
但个人认为,程序员主动的使用 list = null,map = null 等赋予 null 值 的方法标记自己不再使用的对象,更有利于GC回收。毕竟再智能的GC算法,也比不上创造这些Java对象的程序员。

原文如下:

一、一个简单的例子

代码图

代码运行结果图:

运行结果图1

运行结果图1为上代码图的运行结果,说明在创建了一个大小为100W的列表后,内存分配了一定大小的空间,在clear() 之后,调用gc()垃圾清除后得到创建列表以后的内存大小。

如果将代码中第11行改为

ArrayList<String> list= new ArrayList<String>();

后将得到运行结果图2.说明在创建了一个默认大小的列表后,往里面添加数据时自动扩充了列表的大小,因为列表扩充时成倍扩充的原理,最后调用clear()和gc()后的结果内存要比图1中少(可能此时列表的SIZE要大于100W).

运行结果图2

如果将代码中第32行中的list.clear();改为list=null; 将会得到以下结果:

运行结果图3

或将第32行删掉后也会得到上述结果.

说明赋值NULL后不仅列表中的对象变成了垃圾,为列表分配的空间也会回收,什么都不做与赋值NULL一样,说明直到程序结束也用不上列表list了,它自然就成为垃圾了.clear()只是清除了对象的引用,使那些对象成为垃圾。

【Java-GC】集合Collection的clear()和GC垃圾回收测验相关推荐

  1. java之集合Collection之List接口总结

    总结自韩顺平老师的零基础30天学 JAVA 目录 一.集合的框架体系 1.java的集合体系主要可分为两大类:Collection和Map集合. 2.Collection和Map的区别 二.Colle ...

  2. java 终结此段代码并重新运行_Java垃圾回收

    好久没看关于java的书了, 最近, 看了James Gosling的<>, 做了一些读书笔记. 这部分是关于垃圾回收的. 1.垃圾回收 对象是使用new创建的, 但是并没有与之相对应的d ...

  3. Java虚拟机(三)——初识JVM的垃圾回收机制

    前言 对于程序计数器.虚拟机栈.本地方法栈这三个部分而言,其生命周期与相关线程有关,随线程而生,随线程而灭.并且这三个区域的内存分配与回收具有确定性,因为当方法结束或者线程结束时,内存就自然跟着线程回 ...

  4. 深入了解java虚拟机(JVM) 第六章 垃圾回收算法

    一.标记清除算法 标记清除算法顾名思义,就是将需要回收的对象进行标记,然后进行清除.那么这个算法就有标记和清除两种过程.标记过程主要是通过可达性分析算法进行判断存活对象,然后遍历所有的对象来找到需要回 ...

  5. java基础---集合collection的方法介绍

    package com.henu;import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; / ...

  6. java基础 - 集合Collection

    1. 1-50的随机数 用集合实现 生成50个[10,50]之间的随机数,然后按数字从小到大顺序输出.(这次用Map做) 输出格式 数字:出现次数 1 //用ArraryList 集合来实现 2 3 ...

  7. java new对象 =null_在Java中将对象分配为null会影响垃圾回收吗?

    通常,没有. 但就像所有事情一样:这取决于.如今,Java中的GC非常好,所有内容都应该在不再可用后立即清理.这就是在为局部变量留下一个方法之后,以及当不再为字段引用类实例时. 如果您知道它将继续引用 ...

  8. 【Java练习题】Java 程序的输出 | 第十套(垃圾回收)

  9. Java进阶 JVM 内存与垃圾回收篇(一)

    JVM 1. 引言 1.1 什么是JVM? 定义 Java Vritual Machine - java 程序的运行环境(Java二进制字节码的运行环境) 好处 一次编译 ,到处运行 自动内存管理,垃 ...

  10. java中gc是怎么工作的_java中的GC(gabage collection)如何工作

    1. "引用记数(reference counting)"是一种简单但速度很慢的垃圾回收技术.每个对象都含有一个引用记数器,当有引用连接至对象时,引用计数加1.当引用离开作用域或被 ...

最新文章

  1. umi3 如何管理model_django admin 管理工具
  2. Mongodb WiredTiger存储引擎特性
  3. csdn本地网页 打开自动跳转首页的 解决办法
  4. DL之AlexNet:利用卷积神经网络类AlexNet实现猫狗分类识别(图片数据增强→保存h5模型)
  5. Linux下百度云盘报 获取bdstoken失败
  6. fortran 读整行_我整周读过的最有趣的东西
  7. 贪心算法——字典序最小问题
  8. Python开发游戏自动化后台脚本
  9. 21年寒假第二周周练 蒜厂年会(一)最大连续子序列和
  10. Java Test Fore
  11. 作业成本法中的成本动因分析----by AMT 邓为民
  12. 智力题--CSDN论坛收集
  13. 计算机听评课会议记录,研修评课议课会议记录
  14. Python IDEL查询和修改当前目录
  15. 简单介绍长短期记忆网络 - LSTM
  16. 基于ssm儿童玩具租赁管理系统
  17. 2.2_枚举类型的特点
  18. 轻松上手 | 使用国内资源安装 K3s 全攻略
  19. 制作系统启动安装U盘
  20. 跳槽需要注意的一些事

热门文章

  1. 480位禅宗大德悟道因缘
  2. vue项目如何做到每30秒刷新1次接口?
  3. php编程三阶魔方,三阶魔方还原教程
  4. 为资产分类定义折旧范围_SAP折旧范围
  5. 129:vue+openlayers:extent 在EPSG:4326,EPSG:3857,EPSG:900913,CRS:84的范围值
  6. 旋转矩阵到旋转角的计算
  7. Python类的继承
  8. nginx下载安装,以及简单配置
  9. 扫描全能王添加头像的方法
  10. 下载速度MB/s与Mb/s的区别