《Beginning Java 7》 - 8 - Collecting Garbage 垃圾回收
Java 垃圾回收机制原理:
Java 语言使用 garbage collector 来进行垃圾回收。它是允许在后台的代码,间或地检查没有引用的对象(unreferenced object)。发现后,会在系统堆栈(heap)中清除来释放空间。
unreferenced object 是在程序中任何位置都不能被访问的对象,比如
new Emplyee ("jack",32);
当程序中把一个对象的所有引用都清除了的时候,这个对象就变成了 unreferenced object。
虽然 Java 有这样的自动的垃圾回收机制,它仍然有内存泄露的风险:比如我们持续的创建对象,而忘记清除对象的引用的时候。系统堆栈(heap)会被填满,然后程序将终止。这种现在尤其在 Collection (集合)中典型地出现。这是一个需要长时间运行的程序非常可能碰到的问题,比如一个网络服务器程序。但在短时间运行的程序中,这个问题往往被无视。
比如我们创建一个数组(栈) Object[] elements = new Object[size]; 我们可以用一个整型的 index 用来标记数组里的元素个数并往数组里添加或删除元素。当我们删除(pop)数组里一个元素时,index--。但我们要记得把这个位置上的引用清除。就是index -- 前,把 elements[index] = null; 否则引用一直在哪里除非以后被覆盖。是想如果我们在数组中存的是很大的图片,这样会造成巨大的浪费。但我们是不是永远记得赋给这些不用的引用 null 就完美了呢?不是这样,我们必须非常的小心,否则非常可能会导致 NullPointerExeption。管理内存是个非常复杂的工作,我们会在之后再来探讨。
《Beginning Java 7》 - 8 - Collecting Garbage 垃圾回收的更多相关文章
- Java虚拟机内存模型及垃圾回收监控调优
Java虚拟机内存模型及垃圾回收监控调优 如果你想理解Java垃圾回收如果工作,那么理解JVM的内存模型就显的非常重要.今天我们就来看看JVM内存的各不同部分及如果监控和实现垃圾回收调优. JVM内存 ...
- Java中内存泄露及垃圾回收机制
转自:http://blog.sina.com.cn/s/blog_538b279a0100098d.html 写的相当不错滴...................... 摘 要 Java语言中,内 ...
- Java虚拟机学习笔记——JVM垃圾回收机制
Java虚拟机学习笔记——JVM垃圾回收机制 Java垃圾回收基于虚拟机的自动内存管理机制,我们不需要为每一个对象进行释放内存,不容易发生内存泄漏和内存溢出问题. 但是自动内存管理机制不是万能药,我们 ...
- Java进阶 JVM 内存与垃圾回收篇(一)
JVM 1. 引言 1.1 什么是JVM? 定义 Java Vritual Machine - java 程序的运行环境(Java二进制字节码的运行环境) 好处 一次编译 ,到处运行 自动内存管理,垃 ...
- Java中的分代垃圾回收策略
一.分代GC的理论基础 分代的垃圾回收策略,是基于这样一个事实:不同的对象的生命周期是不一样的.因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率. 在Java程序运行的过程中,会产生大 ...
- 探秘Java虚拟机——内存管理与垃圾回收
本文主要是基于Sun JDK 1.6 Garbage Collector(作者:毕玄)的整理与总结,原文请读者在网上搜索. 1.Java虚拟机运行时的数据区 2.常用的内存区域调节参数 -Xms:初始 ...
- 探秘Java虚拟机——内存管理与垃圾回收(转)
本文主要是基于Sun JDK 1.6 Garbage Collector(作者:毕玄)的整理与总结,原文请读者在网上搜索. 1.Java虚拟机运行时的数据区 2.常用的内存区域调节参数 -Xms:初始 ...
- java内存机制和GC垃圾回收机制
Java 内存区域和GC机制 转载来源于:https://www.cnblogs.com/zhguang/p/3257367.html 感谢 目录 Java垃圾回收概况 Java内存区域 Java对象 ...
- 牛客网Java刷题知识点之垃圾回收算法过程、哪些内存需要回收、被标记需要清除对象的自我救赎、对象将根据存活的时间被分为:年轻代、年老代(Old Generation)、永久代、垃圾回收器的分类
不多说,直接上干货! 首先,大家要搞清楚,java里的内存是怎么分配的.详细见 牛客网Java刷题知识点之内存的划分(寄存器.本地方法区.方法区.栈内存和堆内存) 哪些内存需要回收 其实,一般是对堆内 ...
随机推荐
- C# unsafe模式内存操作深入探索
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Run ...
- 大神的---解决tomcat内存溢出问题----tomcat报错:This is very likely to create a memory leak问题解决
tomcat memory leak解决方案 这种问题在开发中经常会碰到的,看看前辈的总结经验 Tomcat内存溢出的原因 在生产环境中tomcat内存设置不好很容易出现内存溢出.造成内存溢出是不一 ...
- java 项目的jar 反编译后 压缩回去 命令
jar -cvfm0 123.jar META-INF\MANIFEST.MF(配置文件第一个位置) BOOT-INF org
- rocketmq消费负载均衡--push消费为例
本文介绍了DefaultMQPushConsumerImpl消费者,客户端负载均衡相关知识点.本文从DefaultMQPushConsumerImpl启动过程到实现负载均衡,从源代码一步一步分析,共分 ...
- Nginx源码完全注释(6)core/murmurhash
下面是摘自 Google Code 的 Murmurhash 开源项目主页上的 Murmurhash2,Nginx 就是采用的这个. uint32_t MurmurHash2 ( const void ...
- unity3d xml序列化
using UnityEngine; using System.Collections; using System.Xml; using System.Xml.Serialization; using ...
- Windows下redis的安装与使用
Redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set ...
- BOOST_TYPEOF和BOOST_AUTO
1.简介 头文件<boost/typeof.hpp>里定义了两个宏:BOOST_TYPEOF和BOOST_AUTO,分别用于仿真C++新标准的typeof和auto关键字,可以在编译期自动 ...
- C#中一个窗口是一个类呢,还是一个窗口类的实例呢?(转)
C#中一个窗口是一个类呢,还是一个窗口类的实例呢? 答: 没有一个人说到重点上. 一个窗口,它不是仅仅用一个类可以描述的: 首先,这个窗口的数据类型类型,是从Form类派生下来的,也就是说它的定义是一 ...
- xgboost 里边的gain freq, cover
assuming that you're using xgboost to fit boosted trees for binary classification. The importance ma ...