内存相关
- 数据的传递方式
- 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++程序员必须及时进行垃圾回收