产生一个Java的内存泄露
来源:互联网 发布:淘宝店铺宝贝推广 编辑:程序博客网 时间:2024/06/05 20:37
在纯Java中,有一个很好的方式可以产生真正的内存泄露(通过执行代码使对象不可访问但仍存在于内存中):
- 应用产生一个长时间运行的线程(或者使用一个线程池加速泄露)。
- 线程通过一个(可选的自定义)类加载器加载一个类。
- 该类分配大内存(例如,new byte[1000000]),赋值给一个强引用存储在静态字段中,再将它自身的引用存储到ThreadLocal中。分配额外的内存是可选的(泄露类实例就够了),但是这样将加速泄露工作。
- 线程清除所有自定义类的或者类加载器载入的引用。
- 重复上面步骤。
这样是有效的,因为ThreadLocal持有对象的引用,对象持有类的引用,接着类持有类加载器的引用。反过来,类加载器持有所有已加载类的引用。这会使泄露变得更加严重,因为很多JVM实现的类和类加载都直接从持久带(permgen)分配内存,因而不会被GC回收。
0 0
- java 产生一个Java的内存泄露
- 产生一个Java的内存泄露
- Java内存泄露的一个小例子
- 可能产生内存泄露的原因
- java的内存泄露
- java的内存泄露
- Java的内存泄露
- java的内存泄露
- java的内存泄露
- JAVA的内存泄露
- Java的内存泄露
- Java的内存泄露
- Java的内存泄露
- Java的内存泄露
- 使用Handler容易产生的内存泄露以及介绍下Java的4种引用
- 使用Handler容易产生的内存泄露以及介绍下Java的4种引用
- 关于java的内存泄露
- 【转】Java的内存泄露
- iOS objc_msgSend 报错解决方案
- 团队管理心得
- SQL Server 性能调优(cpu)
- 编译中遇到的小问题
- Apache Rewrite如何传递GET参数的问题
- 产生一个Java的内存泄露
- 考试倒计时jquery+cookie(防止刷新)
- Java中equals与==的区别(全面)
- JavaCC
- ANTLR
- [Mathworks Matlab][R2014a]安装过程存档
- 黑马程序员----集合1(String、StringBuffer、基本数据类型对象)
- Squid
- 吊兰