被问到有关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