2022年Java中内存泄露及垃圾回收机制 .pdf





《2022年Java中内存泄露及垃圾回收机制 .pdf》由会员分享,可在线阅读,更多相关《2022年Java中内存泄露及垃圾回收机制 .pdf(3页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第 30 卷第 2 期唐 山 师 范 学 院 学 报2008 年 3 月Vol.30 No.2 Journal of Tangshan Teachers College Mar. 2008 收稿日期: 2007-03-20 作者简介:张学红(1978-) ,男,河北滦县人,助教,工学学士,现从事计算机程序语言科研工作。- 80 -Java中内存泄露及垃圾回收机制张学红,李小慧,杜瑞庆(唐山师范学院计算机科学系,河北唐山 063000 )摘要:Java语言中,内存空间中垃圾回收的工作由垃圾回收器(Garbage Collector,GC)完成, GC 可以有效地减少内存泄露发生的概率,但它的启动
2、无规律可循,因此不能完全避免内存泄露。通过分析产生内存泄露的原因,提出了Java编程中的一些注意事项,有效地避免了内存泄露。关键词: Java;内存泄露;垃圾回收器;虚拟机中图分类号: TP312 文献标识码: A 文章编号: 1009-9115(2008)02-0080-03 Memory Leaks in Java and Garbage Collector ZHANG Xuehong, LI Xiaohui, DU Ruiqing (Department of Computer Science, Tangshan Teachers College, Hebei Tangshan, 063
3、000, China) Abstract:In Java language, Garbage Collector (GC) is responsible for collecting garbage in memory. GC can reduce occurrence of memory leaks effectively, but its work has no rules, so it cant avoid memory leaks entirely. Having analyzed the reasons of memory leaks, several suggestions wer
4、e put forwarded in Java programming which can avoid memory leaks effectively. Key words: Java; memory leaks; garbage collector; virtual machine Java 是一种可以编写跨平台应用软件的面向对象的程序设计语言,由Sun Microsystem 公司的詹姆斯高斯林等人于 20 世纪 90 年代初开发。伴随着Java技术的普及,网络上越来越多的服务器程序采用Java技术,特别是Internet使 Java 成为网上最流行的编程语言。在传统的高级编程语言(例
5、C+)中,对象的创建和回收均由程序员自行负责,如果创建了对象而忘记回收,则会造成内存泄漏, 长此以往,程序运行的时候可能会生成很多不清除的垃圾,浪费了不必要的内存空间,有时还可能引起系统的崩溃。在Java 中,引入了垃圾回收机制: 垃圾回收器 (Garbage Collector, GC) ,可以自动回收内存中的垃圾,这是Java 语言相对于其它语言的优势,但是内存泄漏并不会因此而完全避免。1 内存泄露大多数 C+编译器不支持垃圾回收机制。通常使用 C+编程的时候, 程序员所创建的对象在创建时在堆栈上分配一块内存地址, 当不需要这个对象,进行析构或者删除的时候再释放分配的内存空间。如果对象是在
6、堆上分配了,而程序员又忘记进行释放,这些空间又无法自动回收,就会造成内存泄漏。而无法回收的内存空间,即丢失的内存(称为“垃圾” ) ,除非是重新启动系统否则永远也不会还给操作系统。长此以往, 程序运行的时候可能会生成很多垃圾,浪费了不必要的内存空间。 更糟糕的是, 如果同一内存地址被删除两次的话,程序会变得不稳定,甚至崩溃。Java语言则不同, 上述的情况被自动垃圾回收机制自动处理。对象的建立和放置都是在内存堆栈上面进行的。程序或者其他的对象可以锁定一块堆栈地址来进行其他对象的引用。当一个对象没有任何引用的时候,Java的自动垃圾回收机制就发挥作用,自动删除这个对象所占用的空间,释放内存以避免
7、内存泄漏。 但是内存泄漏并不是就此而完全避免了,当程序员疏忽大意地忘记解除一个对象不应该有的引用的时候, 内存泄漏仍然不可避免,不过发生的几率要比不启用垃圾回收机制的C+程序少很多。 但是总体来讲, 自动垃圾回收机制要安全和简单许多。2 垃圾回收机制名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 3 页 - - - - - - - - - 张学红,等:Java 中内存泄露及垃圾回收机制- 81 -2.1 什么是垃圾垃圾,内存中的垃圾, 即内存中已无效但又无法自动释放的空间
8、。在Java 语言中,没有引用句柄指向的类对象最容易成为垃圾。产生垃圾的情况有很多,主要有以下3 种:(1)超出对象的引用句柄的作用域时,这个引用句柄引用的对象就变成垃圾。例 1 Person p1 = new Person(); 引用句柄 p1的作用域是从定义到“”处,执行完这对大括号中的所有代码后,产生的Person对象就会变成垃圾,因为引用这个对象的句柄p1已超过其作用域, p1 已经无效,Person对象不再被任何句柄引用了。(2)没有超出对象的引用句柄的作用域时,给这个引用句柄赋值为空时,这个引用句柄引用的对象就变成垃圾。图 1 柄赋值为空的引用的对象变成垃圾例 2 Person p
9、1 = new Person(); . p1 = null; . 在执行完“ p1=null; ”后,即使句柄p1 还没有超出其作用域,仍然有效,但它已被赋值为空,不再指向任何对象,则这个 Person 对象不再被任何句柄引用,变成了垃圾。此后 p1 还可以指向其它Person对象,因为还没有超出它的作用域。(3)创建匿名对象时,匿名对象用完以后即成垃圾。例 3 new Person(); /因为是匿名对象,没有引用句柄指向它,即为垃圾new Person().print(); / 当运行完匿名对象的print() 方法,这个对象也变成了垃圾 因此,在程序中应尽量少用匿名对象。2.2 垃圾回收
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年Java中内存泄露及垃圾回收机制 2022 Java 内存 泄露 垃圾 回收 机制

限制150内