內存相關
- 數據的傳遞方式
- 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++程序員必須及時進行垃圾回收