转载自http://www.wolfbe.com/detail/201609/378.html

摘要:在Java中,内存泄漏是指程序中存在某些对象已经不会再被使用,但由于仍被其它对象引用而造成内存不能被及时释放,从而造成内存被浪费。
什么是内存泄漏?在Java中,内存泄漏是指程序中存在某些对象已经不会再被使用,但由于仍被其它对象引用而造成内存不能被及时释放,从而造成内存被浪费。
我们知道Java创建一个对象后,就会在堆内存中给这个对象分配一块内存,JVM会监控所有的对象创建、赋值等过程,JVM持有一个记录对象引用的一个有向图,起点为Root,把一个对象赋值给某个引用,JVM就会给这个对象在引用有向图中加多上一条路径。当一个对象不再被引用,即通过Root到这个对象不可达,在下一次GC到来时就可能回收这个对象。
举个例子,如下所示:

?
1
2
3
4
5
6
7
public static void main(String[] args){
     Object obj1 = new Object();
     Object obj2 = new Object();
     obj2 = obj1;
     ...
}

调用obj2=obj1,使obj2引用指向对象OBJ1,OBJ2对象由于没有引用指向,那么如果下一次GC到来,那么就可能会回收OBJ2对象(因为垃圾回收的过程是不确定的,当一个对象没有被引用了,那么说明这个对象可以被回收,但不能保证一定会被回收掉)。
如果在程序中确定不再使用OBJ2对象,但却被其它对象引用,那么就会出现内存泄漏的现象,如下所示:

?
1
2
3
4
5
6
7
Object obj1 = new Object();
Object obj2 = new Object();
Vector v=new Vector(10);
v.add(obj1);
v.add(obj2);
...
obj2 = null;

代码中obj2 = null确定会释放obj2对OBJ2对象的引用,但是变量v仍然保持着对OBJ2对象的引用,那么OBJ2对象不会被GC回收。
我们在写程序时应该正确地释放不再引用的对象,尤其是在一些静态集合、数据库连接、内部类的代码中,应当检查是否存在不可用对象的引用仍然被持有,避免因为无法释放不可用对象而造成内存的浪费。
赞 NaN  分享

JVM系列之内存泄漏相关推荐

  1. 一次完整的JVM堆外内存泄漏故障排查记录

    前言 记录一次线上JVM堆外内存泄漏问题的排查过程与思路,其中夹带一些JVM内存分配机制以及常用的JVM问题排查指令和工具分享,希望对大家有所帮助. 在整个排查过程中,我也走了不少弯路,但是在文章中我 ...

  2. Android内存优化(三)避免可控的内存泄漏

    相关文章 Android性能优化系列 Java虚拟机系列 前言 内存泄漏向来都是内存优化的重点,它如同幽灵一般存于我们的应用当中,有时它不会现身,但一旦现身就会让你头疼不已.因此,如何避免.发现和解决 ...

  3. 详细分析内部类的发生内存泄漏的原因

    文章目录 避免内部类中的内存泄漏 步骤1:内部类引用其外部类 步骤2:构造函数获取封闭的类引用 步骤3:声明一种新方法 内存泄漏的解剖 避免内部类中的内存泄漏 使用内部类时要当心垃圾收集 如果您已了解 ...

  4. java内存泄漏和内存溢出_Java和内存泄漏

    java内存泄漏和内存溢出 总览 术语"内存泄漏"在Java中的使用方式不同于在其他语言中使用的方式. 通用术语中的"内存泄漏"是什么意思,在Java中如何使用 ...

  5. new arraylist内存_如何避免内部类中的内存泄漏

    我先假设读者已经熟悉在Java代码中使用嵌套类的基础知识.在本文里,我将展示嵌套类的陷阱,内部类在JVM中引起内存泄漏和内存不足错误的地方.之所以会发生这种类型的内存泄漏,是因为内部类必须始终能够访问 ...

  6. java final 内存泄漏_干货详解:一文教你如何避免内部类中的内存泄漏

    我先假设读者已经熟悉在Java代码中使用嵌套类的基础知识.在本文里,我将展示嵌套类的陷阱,内部类在JVM中引起内存泄漏和内存不足错误的地方.之所以会发生这种类型的内存泄漏,是因为内部类必须始终能够访问 ...

  7. 4大JVM性能分析工具详解,及内存泄漏分析方案

    谈到性能优化分析一般会涉及到: Java代码层面的,典型的循环嵌套等 还会涉及到Java JVM:内存泄漏溢出等 MySQL数据库优化:分库分表.慢查询.长事务的优化等 阿里P8架构师谈:MySQL慢 ...

  8. Java内存泄漏系列--匿名内部类导致内存泄露--原因/解决方案

    原文网址:Java内存泄漏系列--匿名内部类导致内存泄露--原因/解决方案_IT利刃出鞘的博客-CSDN博客 简介 说明 本文用示例介绍匿名内部类会导致内存泄漏的原因及其解决方案. 相关网址 普通内部 ...

  9. JVM内存泄漏检测与处理

    JVM内存泄漏检测与处理(JVM Memory Leak detection and handling) JVM垃圾回收机制的原则和方法 JVM垃圾回收中一个基本原则是对象没有被引用或则引用其它对象, ...

最新文章

  1. RHCE-samba服务
  2. laravel迁移文件
  3. WCF错误“验证消息的安全性时发生错误”
  4. 全排列及相关扩展算法(七)——组合数的字典序(另含全章代码整理)
  5. sql max同一行_超经典SQL题 | 做完这4道面试题你就过关了
  6. Windows下pip安装scipy报错no lapack/blas resources found
  7. win10+anaconda3+python3.7+pytorch-cpu安装
  8. Windows一般都用系统进程来加载内核模块
  9. cass读取dat文件_南方CASS方格网土方计算心得
  10. lc滤波器是利用电感的感抗_电感器在电路中的应用特性
  11. 计算机维修费税收分类,维修费税收分类编码是多少?
  12. 产品案例分析 - 华为软件开发云
  13. 鲍威尔法源程序码matlab,十一、Powell算法(鲍威尔算法)原理以及实现
  14. 在线API 工具之SosoApi
  15. CDR 制作“决战高考”海报
  16. MSTAR 数据转格式
  17. 分享27个谷歌(Google)镜像
  18. Win10__查看设备管理器中的端口
  19. Elasticsearch 中的 Guice
  20. 第一范式第二范式第三范式学习笔记

热门文章

  1. TCP keepalive的详解(解惑)
  2. instsrv.exe——来自Windows 2000 Resource Kits的一个小工具
  3. 重载-运算符(感觉怪怪的)
  4. sockaddr与sockaddr_in的区别
  5. Gh0st源码学习(一)前期准备工作
  6. 交换机网络嗅探方法之用ARP欺骗辅助嗅探
  7. OkHttp3的连接池及连接建立过程分析
  8. 进程组 会话 作业
  9. Ubuntu下搭建Janus Server
  10. 讲述CCF-腾讯犀牛鸟基金项目成长故事