記憶體經典案例分析

2021-07-10 12:45:18 字數 1656 閱讀 7710

練習:

package com.heima.collection;

public class example ;

public static void main(string args)

public void change(string str, char ch)

}

記憶體執行過程:

過程解析:

①從main方法中開始,生成example物件,在棧記憶體中建立物件應用,在堆記憶體中建立例項物件,物件中有兩個引用:乙個是字串引用指向常量池中的「good」,乙個是陣列引用指向堆記憶體中的一維陣列。

②呼叫change方法,則str指向常量池「good」,ch指向成員變數ch指向的一維陣列。

③str指向常量池中的字串常量「test ok」,ch指向的陣列第一位發生改變。

string類方法的介紹

關於string的經典練習題

package com.itheima;

import org.junit.test;

public class stringtest

/*** 練習一:模擬trim()

*/// 方法一

public string trim1(string str)

while ((" ".equals(string.valueof(chararray[end]))) && end > 0)

return str.substring(start, end + 1);

} return null;

} // 方法二

public string trim2(string str)

while (end > start && str.charat(end) == ' ')

return str.substring(start, end + 1);

} return null;

} /**

* 練習二:將乙個字串進行反轉,將字串的指定部分進行反轉

*/public string reverse(string str, int beginindex, int endindex)

/*** 練習三:統計字串在字串中的出現次數 例:"ab"在"abcdedg"

*/public int count()

/*** 練習四:獲取兩字串的最大相同字串

*//**

* 練習五:將字串中的字元進行自然排序

*//**

* 練習六:定義自己的string類*/}

注:

stringbuffer是可變序列,並且效率高於string,通常期方法可能改變自身,並不像string的操作函式返回的是乙個新的字串

stringbuilder是可變序列,效率高於stringbuffer但是執行緒不安全。

記憶體溢位真實案例分析

某業務系統中,同一天產生多次excel匯出請求,excel資料需要通過查表獲取,由於資料量過大,導致了outofmemoryerror 事先在服務啟動指令碼中已設定oom異常觸發堆快照引數及gc詳情列印引數 xx printgctimestamps xx printheapatgc xx heapd...

QThread多執行緒程式設計經典案例分析

傳統的圖形介面應用程式都只有乙個執行緒執行,並且一次執行乙個操作。如果使用者呼叫乙個比較耗時的操作,就會凍結介面響應。乙個解決方法是按照事件處理的思路 另外乙個解決方法是 採用多執行緒。qt qthread多執行緒程式設計的方法一直有個爭議,就是bradley t.hughes you re doi...

QThread多執行緒程式設計經典案例分析

傳統的圖形介面應用程式都只有乙個執行緒執行,並且一次執行乙個操作。如果使用者呼叫乙個比較耗時的操作,就會凍結介面響應。乙個解決方法是按照事件處理的思路 另外乙個解決方法是 採用多執行緒。qt qthread多執行緒程式設計的方法一直有個爭議,就是bradley t.hughes you re doi...