複習4:內存相關

內存相關

  • 數據的傳遞方式
  • JVM內存
  • 內存泄漏

數據的傳遞方式

將傳遞的一方稱爲傳遞者,接收數據的一方稱爲接收者

值傳遞:基本數據類型
  • 特點:傳遞者爲接收者賦值,接收者因運算而發生的變化不會影響到傳遞者
  • 示例:
package demo;

public class Demo2 {
	public void Test01() {
		int a = 10;
		int b = 5;
		change(a, b);
        //打印後,a和b的值不會發生變化
	}
	public void change(int a,int b) {
		int temp = a;
		a = b;
		b =temp;
	}
}

地址傳遞:引用數據類型
  • 特點:傳遞者將自身指向對象的地址賦值給接收者,即傳遞者與接收者共用一個引用對象,接收者做出的任何改動都會影響到傳遞者

  • 示例:

package demo;

public class Demo2 {
	public void Test01() {
		Fruit f = new Fruit();
		f.applePrice = 10;
		f.pearPrice = 20;
		change(f);
        //打印後發現,applePrice和pearPrice的值發生了互換
	}
	public void change(Fruit f) {
		int temp = f.pearPrice;
		f.pearPrice = f.applePrice;
		f.applePrice = temp;
	}
}


JVM內存

JVM的三個重要區域
  • 棧:存放臨時變量
  • 堆:存放引用對象
  • 方法區:類相關的信息(成員變量,成員方法)
聲明對象的五個步驟
  • 編譯:將.java文件編譯成字節碼文件
  • 加載:將字節碼文件加載到方法區(將類相關的信息加載到方法區)
  • new:根據方法區中的信息,在堆中分配空間、創建對象,並給成員變量賦默認值
  • 賦值:調用構造方法對成員進行初始化
  • 創建引用變量:創建引用變量指向對象在內存中的地址
引用變量調用對象方法
  • 直接從方法區獲得方法的副本

內存泄漏

內存泄漏是什麼

堆、棧中的剩餘內存少於所需內存,最終導致內存溢出

Java的內存泄漏

受益於GC(垃圾回收機制),原則上Java中不存在內存泄漏的問題

Java的垃圾回收
  • 自動檔:GC
    • 作用:自動銷燬沒有引用的對象
    • 特點:無法確定何時發生垃圾回收
  • 手動擋:System.gc()
    • 作用:立即發生一次垃圾回收
    • 特點:無明顯特點,一般情況下,不使用手動回收
Java與C/C++的區別
  • Java程序員不用擔心內存管理,GC會自動進行垃圾回收管理
  • C/C++程序員必須及時進行垃圾回收

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章