几种典型的Java内存泄漏

开发 后端
Java内存泄漏是每个Java程序员都会遇到的问题,程序在本地运行一切正常,可是布署到远端就会出现内存无限制的增长,最后系统瘫痪,那么如何最快最好的检测程序的稳定性,防止系统崩盘,作者用自已的亲身经历与各位网友分享解决这些问题的办法。本文介绍了几种典型的Java内存泄漏。

我们知道了在Java中确实会存在内存泄漏,那么就让我们看一看几种典型的泄漏,并找出他们发生的原因和解决方法。

全局集合

在大型应用程序中存在各种各样的全局数据仓库是很普遍的,比如一个JNDI-tree或者一个session table。在这些情况下,必须注意管理储存库的大小。必须有某种机制从储存库中移除不再需要的数据。

通常有很多不同的解决形式,其中最常用的是一种周期运行的清除作业。这个作业会验证仓库中的数据然后清除一切不需要的数据。

另一种管理储存库的方法是使用反向链接(referrer)计数。然后集合负责统计集合中每个入口的反向链接的数目。这要求反向链接告诉集合何时会退出入口。当反向链接数目为零时,该元素就可以从集合中移除了。 

缓存

缓存一种用来快速查找已经执行过的操作结果的数据结构。因此,如果一个操作执行需要比较多的资源并会多次被使用,通常做法是把常用的输入数据的操作结果进行缓存,以便在下次调用该操作时使用缓存的数据。缓存通常都是以动态方式实现的,如果缓存设置不正确而大量使用缓存的话则会出现内存溢出的后果,因此需要将所使用的内存容量与检索数据的速度加以平衡。

常用的解决途径是使用java.lang.ref.SoftReference类坚持将对象放入缓存。这个方法可以保证当虚拟机用完内存或者需要更多堆的时候,可以释放这些对象的引用。

类装载器

Java类装载器的使用为内存泄漏提供了许多可乘之机。一般来说类装载器都具有复杂结构,因为类装载器不仅仅是只与"常规"对象引用有关,同时也和对象内部的引用有关。比如数据变量,方法和各种类。这意味着只要存在对数据变量,方法,各种类和对象的类装载器,那么类装载器将驻留在JVM中。既然类装载器可以同很多的类关联,同时也可以和静态数据变量关联,那么相当多的内存就可能发生泄漏。

【编辑推荐】

  1. 详细介绍Java的内存管理与内存泄露
  2. Java程序性能优化之找出内存溢出元凶
  3. 20个开发人员非常有用的Java功能代码
  4. 走进Java 7中的模块系统
  5. JavaFX 1.2 已经发布 主要新功能一览
责任编辑:yangsai 来源: CSDN博客
相关推荐

2019-01-30 18:24:14

Java内存泄漏编程语言

2024-03-11 08:22:40

Java内存泄漏

2012-06-19 15:12:20

Java内存泄露

2009-06-16 11:20:22

内存泄漏

2024-01-30 10:12:00

Java内存泄漏

2015-03-30 11:18:50

内存管理Android

2010-09-25 11:07:45

Java内存泄漏

2023-12-18 10:45:23

内存泄漏计算机服务器

2012-08-13 10:14:36

IBMdW

2024-02-21 08:00:55

WindowsDWM进程

2012-02-22 21:28:58

内存泄漏

2009-06-10 22:03:40

JavaScript内IE内存泄漏

2021-10-11 09:51:37

模块化UPS架构

2021-03-07 17:17:07

Java内存闭包

2022-05-26 09:51:50

JavaScrip内存泄漏

2011-06-16 09:28:02

C++内存泄漏

2013-08-07 10:16:43

Android内存泄漏

2022-07-29 08:17:46

Java对象内存

2016-07-05 14:09:02

AndroidJAVA内存

2021-08-05 15:28:22

JS内存泄漏
点赞
收藏

51CTO技术栈公众号