美文网首页
1.7消除过期的对象引用

1.7消除过期的对象引用

作者: flyjar | 来源:发表于2020-12-09 08:26 被阅读0次

1.7消除过期的对象引用

1.7.1

​ 以下代码并没有明显的错误,无论如何测试,它都会成功通过每一项测试,但是这个程序中隐藏一个问题。这段程序有一个内存泄露,随着垃圾回收器活动的增加,或者内存占用的不断增加。程序性能的降低会逐渐表现出来。在极端的情况下,这种内存泄露会导致磁盘交换甚者OOM

public Class Stack{
  
    private Object[] elements;
    
    private int size=0;
  
    private static final int DEFAULT_INITIAL_CAPACITY=16;
  
    public Statck(){
      
       elements=new Object[DEFAULT_INITIAL_CAPACITY];
     
   }
   
   public void push(Object e){
     
   }
  
   public Object pop(){
      if(size==0)
         throw new EmptyStackException();
      return elements[--size];
   }
  
   private void ensureCapacity(){
     if(elements.length==size){
         //扩容一下
         elements=Arrays.copyOf(elements,2*size+1);
     }
   }
 } 
  

​ 优化后的代码

public Object pop(){
  if(size==0)
         throw new EmptyStackException();
       Object reulst= elements[--size];
      elements[size]=null; //明确垃圾回收器进行回收
      return reulst;
}

总结:清空对象引用应该是一种例外,而不是一种规范行为,一般来说只要类是自己管理内存的,程序员就应该警惕内存泄露问题。

​ 由于内存泄露通常不会表现成明显的失败,所以他们可以在一个系统中存在很多年。往往只有通过仔细检查代码,或者借助于Heap解析工具(Heap Profiler)才能发现内存泄露哦问题。

相关文章

  • 1.7消除过期的对象引用

    1.7消除过期的对象引用 1.7.1 ​ 以下代码并没有明显的错误,无论如何测试,它都会成功通过每一项测...

  • 消除过期的对象引用

    第6条:消除过期的对象引用 1. 为什么要消除过期的对象引用 java虽然有自己的垃圾回收机制,但是并没有那么的智...

  • 消除过期的对象引用

    你能看出以下代码哪里内存泄漏吗? 答案是: pop()方法存在内存泄漏。 内存泄漏可以称为“ 无意识的对象保持(u...

  • 消除过期的对象引用

    什么是过期的对象引用? 我们通过简单的栈实现来引入过期的对象引用。 实际上,这段程序中并没有很明显的错误。无论如何...

  • 消除过期的对象引用

    某些类内部维护着对象的过期引用(指永远也不会再被解除的引用),这些对象不会被当作垃圾回收,产生了内存泄露(这类内存...

  • 消除过期的引用对象

    C或者C++是手工管理内存语言,java语言是自带垃圾回收,程序员的工作就很容易,因为当你用完了对象之后,他会被自...

  • 消除过期的对象的引用

    一、消除过期的对象的引用的好处 好处1、防止内存泄漏,导致磁盘交换,甚至会导致程序失败好处2、如果错误地解除引用,...

  • Effective Java 第二章

    避免创建不必要的对象 优先考虑使用基本类型而不是装箱类型,要当心无意识的自动装箱 消除过期对象的引用 一旦对象引用...

  • 06-消除过期对象引用

    阅读原文 06-消除过期对象引用   01 - 当你从手工管理内存的语言转换到具有垃圾回收功能的语言的时候,程序员...

  • 6.消除过期的对象引用

    我们用java管理内存是十分容易的,因为jvm会帮我管理内存的释放,但是这不意味着我们不用担心内存的事情了 造成内...

网友评论

      本文标题:1.7消除过期的对象引用

      本文链接:https://www.haomeiwen.com/subject/rybcgktx.html