`
soongbo
  • 浏览: 87163 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

要知道,java也会有内存泄漏

    博客分类:
  • Java
阅读更多

   当你从手工管理内存的语言到具有垃圾回收机制的功能语言的时候,你也许会觉得很神奇,甚至有点不可思议,然而,却不知这种不可思议的背后却潜在着危机。所以在编写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;

                 }

 

       所以清空过期对象应该引起程序员的重视,但是对于清空过期对象应该是一种意外,而不是一种规范的要求。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics