1. 程式人生 > >棧,記憶體溢位的原因以及物件與物件引用

棧,記憶體溢位的原因以及物件與物件引用

31,棧溢位的原因

是否遞迴的呼叫;大量迴圈;全域性變數是否過多;陣列,List,Map資料是否過大;用DDMS工具檢查地方。

記憶體溢位的原因

過多使用了static;static最好只用int和string等基本型別;大量的遞迴或者死迴圈;大資料項的查詢,

如返回表的所有記錄,應該採用分頁查詢。檢查是否有陣列、List、map中存放的是物件的引用而不是物件,

這些引用會讓對應物件不能被釋放。

棧過大會導致記憶體佔用過多,頻繁頁交換阻礙效率。

Person person;引用

person = new Person("張三");

張三是物件

一個引用可以指向多個物件,

person=new Person("李四");

 

一個物件可以被多個引用所指向

Person person;引用

person1 = new Person("張三");

 

Person person2 = person1;

 

 

Vector<String> A = new Vector<String>();

for(int i = 0; i < 100; i++){

Object o = new Object ();

A.add(o);

o = null;

}

 ........

記憶體溢位的例子

StringBuffer b = new StringBuffer ();

for(int i =0; i < 100; i++){

for(int j =0; i < 100; j++){

b.append(*);

}

}