当你从手工管理内存的语言到具有垃圾回收机制的功能语言的时候,你也许会觉得很神奇,甚至有点不可思议,然而,却不知这种不可思议的背后却潜在着危机。所以在编写Java程序的时候,一定也是必要的要考虑一下“消除过期的对象引用”。我们来看这样一个列子:
public class Stack {
private Object[] elements;
private int size = 0;
private int DEFAULT_SIZE = 10;
public Stack() {
elements = new Object[DEFAULT_SIZE];
}
public void push(Object e) {
elements[size++] = e
}
public Object pop() {
if (size == 0) {
throw new EmptyStackException();
return elements[--size];
}
}
以上是一个简单的实现栈的一段程序,也许你会觉得没有什么问题,可是问题恰恰就潜在在你的代码中,不严格的讲, 程序中有一个”内存泄漏“,随着垃圾回收器活动的增加,程序的性能会不断降低。那么这段程序究竟是哪里出了问题呢?其实就在pop()方法中,当每次取出一个元素放回后,其实elements还维护着这些取出的元素(虽然这些对象对于栈来说已经没有存在的必要),而对于这些过期的对象是永远不会被解除的,所以导致内存一直得不到释放。解决这个问题的方法很简单,就是在pop()方法的中做如下修改
public Object pop() {
if (size == 0) {
throw new EmptyStackException();
Object result = elememts[--size];
element[size] = null;
return result;
}
所以清空过期对象应该引起程序员的重视,但是对于清空过期对象应该是一种意外,而不是一种规范的要求。
分享到:
相关推荐
java内存泄漏解决java内存泄漏解决java内存泄漏解决
如何解决Java内存泄漏
java内存泄漏分析工具
java内存泄露、溢出检查方法和工具。 步骤: 1,使用linux命令生存堆栈文件 2,用MemoryAnalyzer.exe工具打开 3,根据工具生成的饼状图可以清晰的找出内存泄漏源
java使用JMAP定位代码内存泄漏
介绍了java中内存泄露的知识,如:为什么会产生内存泄露,以及通过什么样的方式可以避免内存泄露
java 内存泄漏
详细介绍了 java内存泄露 的一些细节,很受用的
Java内存泄露及内存无法回收解决方案,深入讲解相关原理及相关过程。
虽然java有垃圾自动回收机制,但在写程序时,未及时关闭连接,对象引用未释放等,仍会造成内存泄露,此文章从关闭连接,使用弱引用等方面,介绍了怎样避免内存泄露。
有关java内存泄露的详细资料,Java与C语言的内存管理模型,内存泄漏方式
java 垃圾回收机制 内存泄漏 技术分享 相关技术分享
java内存分析
什么是内存泄漏?造成内存泄漏的原因?如何解决内存泄漏?以及如何避免内存泄漏等。。。
java内存泄露查询的几个命令系统命令的使用说明
详细介绍Java的内存管理与内存泄露 作为Internet最流行的编程语言之一...这里与大家分享我们在开发过程中遇到的Java内存泄漏的检测和处理解决过程. 本文先介绍Java的内存管理,以及导致Java内存泄露的原因。 ........
关于JAVA内存泄漏问题注意事项.doc
linux 内存泄露排查文档。 介绍mtrace的使用。根据实际问题介绍如果定位问题。
java内存泄露问题的定位与详细的分析过程
java内存泄露定位与分析