(Item 5) Eliminate obsolete object references

编程入门 行业动态 更新时间:2024-10-28 14:33:46

(Item 5) Eliminate obsolete object references

public class Stack {

    private Object[] elements;

    private int size = 0;

 

    public Stack(int initialCapacity) {

        this.elements = new Object[initialCapacity];

    }

        public void push(Object e) {

        ensureCapacity();

        elements[size++] = e;

    }

 

    public Object pop() {

        if (size == 0)

            throw new EmptyStackException();

        return elements[--size];

    }

 

    /**

     * Ensure space for at least one more element, roughly

     * doubling the capacity each time the array needs to grow.

     */

    private void ensureCapacity() {

        if (elements.length == size) {

            Object[] oldElements = elements;

            elements = new Object[2 * elements.length + 1];

            System.arraycopy(oldElements, 0, elements, 0, size);

        }

}

 

when the stack grows and shrinks, the object that was pop off will NOT be garbage collected!! Because the stack maintains obsolete references.

The programmer should tell garbage collector that the reference is inactive: null out it

public Object pop() {

    if (size==0)

        throw new EmptyStackException();

    Object result = elements[--size];

    elements[size] = null; // Eliminate obsolete reference

    return result;

}

 

Object references in cache will also not effectively garbage collected! 

更多推荐

(Item 5) Eliminate obsolete object references

本文发布于:2023-06-13 09:19:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1372236.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Eliminate   Item   obsolete   references   object

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!