Java内存泄露的理解与解决
2015-10-19 22:05
405 查看
Java内存管理机制
在C++语言中,如果需要动态分配一块内存,程序员需要负责这块内存的整个生命周期。从申请分配、到使用、再到最后的释放。这样的过程非常灵活,但是却十分繁琐,程序员很容易由于疏忽而忘记释放内存,从而导致内存的泄露。Java语言对内存管理做了自己的优化,这就是垃圾回收机制。Java的几乎所有内存对象都是在堆内存上分配(基本数据类型除外),然后由GC(garbage collection)负责自动回收不再使用的内存。上面是Java内存管理机制的基本情况。但是如果仅仅理解到这里,我们在实际的项目开发中仍然会遇到内存泄漏的问题。也许有人表示怀疑,既然Java的垃圾回收机制能够自动的回收内存,怎么还会出现内存泄漏的情况呢?这个问题,我们需要知道GC在什么时候回收内存对象,什么样的内存对象会被GC认为是“不再使用”的。
Java中对内存对象的访问,使用的是引用的方式。在Java代码中我们维护一个内存对象的引用变量,通过这个引用变量的值,我们可以访问到对应的内存地址中的内存对象空间。在Java程序中,这个引用变量本身既可以存放堆内存中,又可以放在代码栈的内存中(与基本数据类型相同)。GC线程会从代码栈中的引用变量开始跟踪,从而判定哪些内存是正在使用的。如果GC线程通过这种方式,无法跟踪到某一块堆内存,那么GC就认为这块内存将不再使用了(因为代码中已经无法访问这块内存了)。
[align=center]package com.***.widget;
2
3//: SoftHashMap.java
4import java.util.*;
5import java.lang.ref.*;
6
7import android.util.Log;
8
9
112
113[/align]
参考文献
Java 内存管理原理、内存泄漏实例及解决方案研究Java中的强引用、软引用、弱引用和虚引用
垃圾回收与强引用,软引用,弱引用,幻引用的关系
相关文章推荐
- 日常总结(五)同时启动myeclipse和eclipse如何解决端口被占用
- java web(发送邮件,以及要整合的包)
- Java正则表达式基础应用复习
- spring学习之AOP基础
- java 内存泄露
- Eclipse通过HibernateTools实现逆向生成Hibernate实体类
- NetBeans界面的增删改查功能
- 浅谈Spring事务隔离级别
- java调戏人小游戏
- Java中的byte转string
- 黑马程序员——高新技术--JDK1.5新特性(for循环增强、可变参数、静态导入、自动装拆箱、享元)
- JAVA中,文件的输入输出(1)
- java IO/NIO 下载上传的笔记
- Java获取当前时间
- Javamail详解
- 使用jstack分析java程序cpu占用率过高
- 2. java获取下周日-下周六的时间
- 1. java获取本周日-本周六的时间
- Java中static{}块、{}块和普通代码块的研究
- 面包屑之java并发