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
第三個來源是監聽器和其他回撥
相關文章
- 第6條:消除過期物件的引用物件
- 建議:消除過期的物件引用。物件
- #### 使用方法引用的使用場景--通過物件名引用成員方法物件
- 物件與物件引用的區別物件
- java中的引用物件Java物件
- 值物件與引用物件物件
- Vue 消除Token過期時重新整理頁面的重複提示Vue
- 引用物件與例項物件物件
- PHP物件的引用及物件優化策略PHP物件優化
- 高手跳過:消除WinZip8.1版本過期提示框 (4千字)
- Java物件及物件引用變數Java物件變數
- PHP中物件的引用傳遞PHP物件
- 物件的引用計數與dealloc物件
- JavaScript引用物件的途徑(轉)JavaScript物件
- JAVA 物件引用,以及物件賦值Java物件賦值
- 過早的給方法中 引用物件 設為 null 可被 GC提前回收嗎?物件NullGC
- Java基礎11 物件引用Java物件
- PHP物件導向之&引用PHP物件
- 關於引用物件拷貝物件
- 時間物件、引用型別物件型別
- 程式怎樣釋放指向物件的引用物件
- JAVA中的指標,引用及物件的cloneJava指標物件
- Java 物件的生命週期Java物件
- Delphi字串的引用計數與生命週期字串
- 吃人的那些 Java 名詞:物件、引用、堆、棧Java物件
- 深入分析JVM中的物件及引用(十六)JVM物件
- 由 System.arraycopy 引發的鞏固:物件引用 與 物件 的區別物件
- Java 中物件的生命週期Java物件
- Java中容器Vectort用add新增物件是物件引用的問題Java物件
- Angular6 引用Layer外掛Angular
- ES6的Promise物件Promise物件
- 關於PHP5後“預設情況下物件是通過引用傳遞的”思考PHP物件
- [IDE工具篇]XShell6評估期已過IDE
- php中物件是引用型別嗎?PHP物件型別
- 給物件引用變數賦值(轉)物件變數賦值
- 逃逸分析:分離物件、標量替換、同步鎖消除物件
- std::io::BufReader 物件借用和引用的問題物件
- 面試官:說說Java物件的四種引用方式面試Java物件