Java内存泄漏

1、什么是内存泄漏

当某些对象不再被应用程序所使用,但是由于仍然被引用而导致垃圾收集器不能释放(Remove,移除)

2、引起内存泄漏的原因

长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄露(老年代引用新生代)

2.1 当集合里面的对象属性被修改后,由于hashcode改变当再调用remove()方法时不起作用

 1 import java.util.HashSet;
 2 import java.util.Set;
 3
 4 /**
 5  * Created by xiaoxiao7 on 2016/11/9.
 6  */
 7 public class Test01 {
 8
 9     public static void main(String[] args) {
10         Set<String> set = new HashSet<String>();
11         String str1 = new String("aaa");
12         String str2 = new String("bbb");
13         String str3 = new String("ccc");
14         set.add(str1);
15         set.add(str2);
16         set.add(str3);
17         System.out.println("Before: " + set.size());
18         str3 = "ddd";
19         set.remove(str3);
20         set.add(str3);
21         System.out.println("After: " + set.size());
22         for (String str : set) {
23             System.out.println(str);
24         }
25     }
26 }

2.2 静态集合类引起内存泄漏

 1 import java.util.HashSet;
 2 import java.util.Set;
 3 import java.util.Vector;
 4
 5 /**
 6  * Created by xiaoxiao7 on 2016/11/9.
 7  */
 8 public class Test01 {
 9
10     static Vector v = new Vector(10);
11
12     public static void main(String[] args) {
13         for (int i = 1; i<100; i++)
14         {
15             Object o = new Object();
16             v.add(o);
17             o = null;
18         }
19     }
20 }
时间: 2024-08-05 19:37:37

Java内存泄漏的相关文章

Java内存泄漏分析与解决方案

Java内存泄漏是每个Java程序员都会遇到的问题,程序在本地运行一切正常,可是布署到远端就会出现内存无限制的增长,最后系统瘫痪,那么如何最快最好的检测程序的稳定性,防止系统崩盘,作者用自已的亲身经历与各位网友分享解决这些问题的办法. 作为Internet最流行的编程语言之一,Java现正非常流行.我们的网络应用程序就主要采用Java语言开发,大体上分为客户端.服务器和数据库三个层次.在进入测试过程中,我们发现有一个程序模块系统内存和CPU资源消耗急剧增加,持续增长到出现java.lang.Ou

(转)java内存泄漏的定位与分析

转自:http://blog.csdn.net/x_i_y_u_e/article/details/51137492 1.为什么会发生内存泄漏 java 如何检测内在泄漏呢?我们需要一些工具进行检测,并发现内存泄漏问题,不然很容易发生down机问题. 编写java程序最为方便的地方就是我们不需要管理内存的分配和释放,一切由jvm来进行处理,当java对象不再被应用时,等到堆内存不够用时,jvm会进行垃圾回收,清除这些对象占用的堆内存空间,如果对象一直被应用,jvm无法对其进行回收,创建新的对象时

java内存泄漏的定位与分析

1.为什么会发生内存泄漏 java 如何检测内在泄漏呢?我们需要一些工具进行检测,并发现内存泄漏问题,不然很容易发生down机问题. 编写java程序最为方便的地方就是我们不需要管理内存的分配和释放,一切由jvm来进行处理,当java对象不再被应用时,等到堆内存不够用时,jvm会进行垃圾回收,清除这些对象占用的堆内存空间,如果对象一直被应用,jvm无法对其进行回收,创建新的对象时,无法从Heap中获取足够的内存分配给对象,这时候就会导致内存溢出.而出现内存泄露的地方,一般是不断的往容器中存放对象

实战Java内存泄漏问题分析 -- hazelcast2.0.3使用时内存泄漏 -- 1

公司当年有一个自己缓存集群用户session的Java library,是基于hazlcast2.0.3实现的,最近在customer site集群环境中某个blade报了Out of Memory Exception, 其他blades都正常,马上用jrockit jrcmd命令dump了堆和线程进行分析. printf "##################### heap ##################\n" su -p occas -c "/opt/jrocki

实战Java内存泄漏问题分析 -- hazelcast2.0.3使用时内存泄漏 -- 2

hazelcast 提供了3中方法调用startCleanup: 第一种是在ConcuurentMapManager的构造函数中,通过调用node的executorManager中的ScheduledExecutorService来创建每秒执行一次cleanup操作的线程(代码如下).由于这是ConcuurentMapManager构造函数的代码,所以这种调用startCleanup的操作是默认就会有的. node.executorManager.getScheduledExecutorServ

浅谈并小结java内存泄漏

一.定义 首先什么是内存泄漏,简单点说就是用完了忘了回收,而其他对象等资源想用却没法用的一种"站着茅坑不拉屎"的浪费资源的情况.在C/C++中,多数泄漏的场景就是程序离开某一运行域时,如在某个方法体中new出的对象或者malloc出的结构体等,并且只有该方法体中的局部变量指向这块内存区域时,在该方法返回时,存在栈中的局部变量指针随着栈帧被一起销毁,那么就没有任何指针可以指向该内存区域了,那么这块内存区域便是泄漏了. 而java的内存泄漏呢?众所周知,java的内存回收是由gc管理的.g

Java内存泄漏分析系列之一:使用jstack定位线程堆栈信息

原文地址:http://www.javatang.com 前一段时间上线的系统升级之后,出现了严重的高CPU的问题,于是开始了一系列的优化处理之中,现在将这个过程做成一个系列的文章. 基本概念 在对Java内存泄漏进行分析的时候,需要对jvm运行期间的内存占用.线程执行等情况进行记录的dump文件,常用的主要有thread dump和heap dump. thread dump 主要记录JVM在某一时刻各个线程执行的情况,以栈的形式显示,是一个文本文件.通过对thread dump文件可以分析出

Java内存泄漏的几种可能

Java内存泄漏引起的原因: 内存泄漏是指无用对象(不再使用的对象)持续占有内存或无用对象的内存得不到及时释放,从而造成内存空间的浪费称为内存泄漏. 长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄漏,尽管短生命周期对象已经不再需要,但是因为长生命周期持有它的引用而导致不能被回收,这就是Java中内存泄漏的发生场景. 造成内存泄漏的几种情况: 1.静态集合类引起内存泄漏 像HashMap.Vector等的使用最容易出现内存泄露,这些静态变量的生命周期和应用程序一致,他们所引用的所有的对

Java 内存泄漏--全解析和处理办法 [ 转载 ]

Java内存泄露——全解析和处理办法 [转载] @author 小筐子 @address http://www.jianshu.com/p/bf159a9c391a 本文章会一步一步的探讨内存泄露的问题.博主第一次书写长篇技术贴,如有错误或不周到的地方请多指教. JAVA是垃圾回收语言的一种,开发者无需特意管理内存分配.但是JAVA中还是存在着许多内存泄露的可能性,如果不好好处理内存泄露,会导致APP内存单元无法释放被浪费掉,最终导致内存全部占据堆栈(heap)挤爆进而程序崩溃. 内存泄露 说到