java内存漏洞_Java中存在的内存漏洞问题与处理

科技信息 0计算机与信息技术0 SCIENCE&TECHNOLOGY INFORMATION 2007年 第 3l期

Java中存在的内存漏洞问题与处理

吴万琴

f甘肃联合大学理工学院 甘肃 兰州 730000)

【摘 要 java语言中,其内存管理工作是由一个后台垃圾自动收集 (Garbage couector)完成的,但在java编程中,仍然存在这内存漏洞,内

存管理仍旧是要考虑的问题,在本文中,您将了解到什么导致了java的内存漏洞以及这些问题的处理。

【关键词 java;内存漏洞

0.引言 :随着信息技术的快速发展与进步 ,Intemet与其以及相

关应用系统的快速普及 ,iava语言的正式发表可以说是 Intemet的一

次技术性革命。它成为网上最流行的编程语言。在 C、c++中,程序员必

须调用molloc0函数与freeO函数进行内存分配与释放,如不小心,就

可能造成系统故障或空间浪费,但在 iava中,专门有一个后台垃圾 自

动收集程序(Garbage collector,垃圾收集器),它以较低的线程优先级对

存储器进行扫描,自动管理内存的回收,因此,有些人认为,在 java中,

不必担心内存的分配以释放问题,然而,实际并非如此,在 iava中仍然

存在着内存漏洞。

1.垃圾收集器的工作方式

iava语言的特点是面向对象,在 iava中,绝大部分成员是对象,除

简单的基本类型外 。其他的对象都需要在程序中用 new运算符为其申

请内存空间。而空间的释放有垃圾收集器完成.垃圾收集器的功能是

发现应用程序中不再需要的对象,并在这些对象不在被访问或引用时

将它们删除。垃圾收集器从根结点f在 iava应用程序的整个生存期内

存在的那些类)开始,遍历被引用的所有结点,同时监控哪些对象正被

引着。任何类只要不再被引用。则被垃圾收集器收集,即删除这些对

象,将它们所占用的内存资源返回给 iava虚拟]~tl,(JVM)。

但是。大家一定要注意,只有当一个对象不再被引用时,才会被垃

圾收集器收集,如图一所示的情况则不被收集。

时间

上图说明在java的程序的执行期间具有不同生命周期的两个类,

类 A先被初始化,并在很长一段时间内存在,某一时刻,类 B被创建。

类 A创建一个对类 B的引用,即便不再需要类 B.如果不清除 A对 B

的应用,类B仍然存在并占用内存。这样,就产生了内存泄露。

2.常见 内存泄漏 问题

内存泄露是指分配出去后无法回收内存空间,跟其他传统的高级

编程语言相比,java虚拟机(JVM)的垃圾收集器已经在结构和算法做

了相当大改进,但在实际应用,垃圾收集器只收集不再被引用的对象.

当一个应用程序运行时间过长,这时,即或一个对象是无用的,也不能

被垃圾收集器回收,这就是内存漏洞,常见的内存漏洞问题如下:

(1)程序在执行了一段时间后发出iava.1ang.OutOfMemoryEror错

误。(2)垃圾收集器在应用程序的生存期内可能始终不会运行 ,在这种

情况下,那些没什么用途的”死”对象在程序执行期间始终占用内存

f3)在生命较短的应用程序中,分配大量的临时对象,在不用这些对象

时没有取消对它们的引用,则可能耗尽内存。f4)长期运行在服务器上

的代码。即便是小漏洞也会导致 JVM耗尽全部可用内存。

3.内存漏洞问题的处理

为了减少 java中的内存漏洞,提高内存利用率,如果知道哪些对

象会导致漏洞,有时候能够制止或避免泄露问题,常见方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值