• 关于Java的一道内存的题目


    import java.util.Arrays;
    import java.util.EmptyStackException;
    public class MyStack<T> {
        private T[] elements;
        private int size = 0;
        private static final int INIT_CAPACITY = 16;
        public MyStack() {
            elements = (T[]) new Object[INIT_CAPACITY];
        }
        public void push(T elem) {
            ensureCapacity();
            elements[size++] = elem;
        }
        public T pop() {
            if(size == 0) 
                throw new EmptyStackException();
            return elements[--size];
        }
        private void ensureCapacity() {
            if(elements.length == size) {
                elements = Arrays.copyOf(elements, 2 * size + 1);
            }
        }
    }

    这段代码是简单的实现了栈的先进先出的,看似简单。其实存在着内存泄露问题。原因出在了pop()方法的实现上。当取出了最顶层的元素之后,虽然控制取数据size减1了。但是在elements数组中并没有对原来的数据进行去引用,所以产生了内存的泄露。

  • 相关阅读:
    HDOJ.1029 Ignatius and the Princess IV(map)
    STL之map
    STL之map
    UVA.1584 环状序列
    UVA.1584 环状序列
    AOJ. 数组训练.2016-11-17
    AOJ. 数组训练.2016-11-17
    AOJ.592 神奇的叶子
    AOJ.592 神奇的叶子
    技能书
  • 原文地址:https://www.cnblogs.com/woniu4/p/4765720.html
Copyright © 2020-2023  润新知