被問到有關Java內存管理的知識,因此要蒐集整理一下了。開始以前,咱們要明白一點,咱們所使用的變量就是一塊一塊的內存空間!!java
方法名稱 | 參數 | 做用 | 返回值 |
getRuntime | 無 | 獲取 Runtime 對象 | Runtime 對象 |
totalMemory | 無 | 獲取 JVM 分配給程序的內存數量 | long:內存數量 |
freeMemory | 無 | 獲取 當前可用的內存數量 | long:內存數量 |
maxMemory | 無 | 獲取 JVM 能夠申請到的最大內存數量 | long:內存數量 |
public class Student { String stuId; String stuName; int stuAge; } public class TestStudent { public static void main(String[] args) { Student s = new Student(); String name = new String("雲鶴"); int a = 10; char b = 'm'; s.stuId = "6363"; s.stuName = "劉德華"; s.stuAge = 25; } }
(1)類固然是存放在方法區裏面的。數組
public class TestArray { void change(int[] arr) { for(int i=0;i<arr.length;i++) if(i%2==0) arr[i]=1000; System.out.println("方法體內修改值後:" ); for(int i=0;i<arr.length;i++) System.out.println(arr[i]); } public static void main(String[] args) { int[] a = {1,2,3,4}; TestArray testString = new TestArray(); System.out.println("方法調用前:"); for(int i=0;i<a.length;i++) System.out.println(a[i]); testString.change(a); System.out.println("方法調用後:"); for(int i=0;i<a.length;i++) System.out.println(a[i]); } }
輸出結果以下:多線程
方法調用前: 1 2 3 4 方法體內修改值後: 1000 2 1000 4 方法調用後: 1000 2 1000 4
數組實際上也是引用類型,在調用函數的過程當中改變了其值。函數
(2)特例:String性能
public class TestString { void change(String str) { str = "吳奇隆"; System.out.println("方法體內修改值後:" + str); } public static void main(String[] args) { String name = "歌星"; TestString testString = new TestString(); System.out.println("方法調用前:" + name); testString.change(name); System.out.println("方法調用後:" + name); }
結果:測試
方法調用前:歌星
方法體內修改值後:吳奇隆
方法調用後:歌星
分析:ui
public class TestChange { void change(Student stu1, Student stu2) { stu1.stuAge ++; stu2.stuAge ++; Student stu = stu1; stu1 = stu2; stu2 = stu; } public static void main(String[] args) { Student z = new Student(); z.stuName = "張信哲"; z.stuAge = 40; Student r = new Student(); r.stuName = "任賢齊"; r.stuAge = 30; System.out.println("交換前z:\t"+z.stuName+"\t"+z.stuAge); System.out.println("交換前r:\t"+r.stuName+"\t"+r.stuAge); TestChange testChange = new TestChange(); testChange.change(z, r); System.out.println("交換後z:\t"+z.stuName+"\t"+z.stuAge); System.out.println("交換後r:\t"+r.stuName+"\t"+r.stuAge); } }
運行結果:spa
交換前z: 張信哲 40 交換前r: 任賢齊 30 交換後z: 張信哲 41 交換後r: 任賢齊 31