6、消除過期的物件引用
消除過期的物件引用
一個棧實踐的反例
本例中凡是被彈出的物件都是過期的引用
public class Stack {
private Object[] elements;
private int size = 0;
private static final int DEFAULT_INITIAL_CAPACITY = 16;
public Stack() {
elements = new Object[DEFAULT_INITIAL_CAPACITY];
}
public void push(Object e) {
ensureCapacity();
elements[size++] = e;
}
//彈出的物件不會被回收,所有要手動置為null
//elements[size] = null;
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)
elements = Arrays.copyOf(elements, 2 * size + 1);
}
}
一般而言只要是類自己管理記憶體(比如上面的物件陣列),程式設計師就應該警惕記憶體洩漏問題
另一個記憶體洩漏的常見來源是快取
使用WeakHashMap
第三個來源是監聽器和其他回撥
相關文章
- #### 使用方法引用的使用場景--通過物件名引用成員方法物件
- 物件與物件引用的區別物件
- java中的引用物件Java物件
- Vue 消除Token過期時重新整理頁面的重複提示Vue
- PHP中物件的引用傳遞PHP物件
- 物件的引用計數與dealloc物件
- 過早的給方法中 引用物件 設為 null 可被 GC提前回收嗎?物件NullGC
- Java基礎11 物件引用Java物件
- PHP物件導向之&引用PHP物件
- Spring 原始碼(14)Spring Bean 的建立過程(6)物件的提前暴露Spring原始碼Bean物件
- Java 物件的生命週期Java物件
- 吃人的那些 Java 名詞:物件、引用、堆、棧Java物件
- std::io::BufReader 物件借用和引用的問題物件
- 深入分析JVM中的物件及引用(十六)JVM物件
- [IDE工具篇]XShell6評估期已過IDE
- python中的引用傳遞,可變物件,不可變物件,list注意點Python物件
- 關於PHP5後“預設情況下物件是通過引用傳遞的”思考PHP物件
- Python中的物件引用、可變性和垃圾回收Python物件
- JAVA 將介面的引用指向實現類的物件Java物件
- php中物件是引用型別嗎?PHP物件型別
- [非專業翻譯] Mapster - 物件引用物件
- ES6的Promise物件Promise物件
- Java 中物件的生命週期Java物件
- vue物件拷貝,解決由於引用賦值修改原物件的方法Vue物件賦值
- Angular6 引用Layer外掛Angular
- 逃逸分析:分離物件、標量替換、同步鎖消除物件
- PHP 物件導向 (四)類物件賦值為引用傳遞PHP物件賦值
- c++中物件的引用作為函式的引數C++物件函式
- JS物件繼承時,對引用屬性的處理JS物件繼承
- 面試官:說說Java物件的四種引用方式面試Java物件
- Python學習之變數、物件和引用Python變數物件
- ES6中的Promise物件Promise物件
- [Java基礎]物件的生命週期Java物件
- ES6的Promise物件的使用Promise物件
- ES6 - 物件物件
- Java的強引用、軟引用、弱引用、虛引用Java
- java中多型的理解——父類引用指向子類物件Java多型物件
- 阿里面試:dubbo的服務引用過程阿里面試
- 生命週期就是指物件的建立到銷燬的期間物件