复习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++程序员必须及时进行垃圾回收

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