如何判断类是否自己管理内存

不穿裤裆好凉爽 2017-11-06 11:10:07
最近在看effective java的消除过期对象引用的时候看到这样一句话,”一般而言,只要是类自己管理内存,程序员就应该警惕内存泄露问题“,那么类自己管理内存是怎么看出来的?
书中给的列子是栈实现的例子,是怎么看出来这个类是自己管理内存的,下面贴代码

public class Stack{
private Object[] elements;
private int size = 0;
private static final int DEFAULT_INITIAL_CAPACITY = 16;

public static(){
elements = new Object[DEFAULT_INITIAL_CAPACITY ];
}

public void push(){
ensureCapacity();
elements[size++] = 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);
}

}
...全文
310 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 4 楼 qq_36895045 的回复:
类能够管理内存说的是这个类能够根据自己的状态改变自身的内存的大小(这只是其中的一点) 这个栈类当容量满时就会自动递增一倍空间,你可以看看Arraylist的源代码这个类也是自动管理内存的, Arraylist类底层实现是数组,当空间不够用时也和栈一样自动递增,你可以想想普通的类创建完后能在运行时改变自己在内存的大小吗,属性方法都定死了,大小也就那样了,变的不过是属性值而已,new一个类是用户自己创建一个类的实例,和类自己管理内存一毛钱关系都没有,所以你明白了吗?
可以老铁,明白了
  • 打赏
  • 举报
回复
引用 3 楼 qq_36895045 的回复:
方法名和关键字static冲突了
晕,拼错了,是public Stack(){}方法
maradona1984 2017-11-06
  • 打赏
  • 举报
回复
这翻译的好生硬
萌萌的华 2017-11-06
  • 打赏
  • 举报
回复
类能够管理内存说的是这个类能够根据自己的状态改变自身的内存的大小(这只是其中的一点) 这个栈类当容量满时就会自动递增一倍空间,你可以看看Arraylist的源代码这个类也是自动管理内存的, Arraylist类底层实现是数组,当空间不够用时也和栈一样自动递增,你可以想想普通的类创建完后能在运行时改变自己在内存的大小吗,属性方法都定死了,大小也就那样了,变的不过是属性值而已,new一个类是用户自己创建一个类的实例,和类自己管理内存一毛钱关系都没有,所以你明白了吗?
萌萌的华 2017-11-06
  • 打赏
  • 举报
回复
方法名和关键字static冲突了
萌萌的华 2017-11-06
  • 打赏
  • 举报
回复
public static(){ elements = new Object[DEFAULT_INITIAL_CAPACITY ]; } 这行代码写错了吧???
  • 打赏
  • 举报
回复
没人吗,自顶

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧