目录
1.jvm内存模型
①:程序计数器:当前线程执行的字节码的行的指示器.(通俗点就是我们用的软件左边或右边的行数).
②:本地方法栈:jvm使用的native方法服务.
③:虚拟机栈:创建栈帧,用于存储局部变量,操作数栈,动态连接,方法的返地址.
④:堆:所有线程所共享的一块内存区域,(数组分配到堆内存,使用new关键字的都会在堆内存里面开辟空间).
⑤:方法区(元空间):线程所共享,常量池(String str="abc",将str引入地址)
⑥:GC(垃圾回收器):将一些不使用的内存给不定时回收,程序员不需要区手动操作,它自动回收.
2,方法调方法,基本数据类型和引用类型
1,需求:定义一个add计算器的方法,在主方法里面调用/
public class L6_方法调方法 {
public static void main(String[] args) {
int num1 = 10;
int num2 = 20;
int ret = add(num1, num2);
System.out.println(ret);
}
public static int add(int a, int b) {
return a + b;
}
}
2,定义一个add方法,add传的是数组,要把数组里面的元素求和
public class L6_方法调方法 {
public static void main(String[] args) {
int[] age = {1, 3, 5, 7};
int ret = add(age);
System.out.println(ret);
}
public static int add(int[] arr) {
int sum = 0;
for (int i : arr) {
sum += i;
}
return sum;
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/415aeae7afabf0ed606e9f9ab4c122d8.png)
3,方法内的基本数据类型的内存变化
public class L5_内存变化 {
public static void main(String[] args) {
//基本数据类型栈的内存变化
int a=10;
int b=10;
b=20;
//引用类型的栈堆内存的变化
int[] arr={1,2,3};
arr=new int[]{2,3,4};
int[] abc=arr;
}
}
1.基本数据类型栈的内存变化
①:先进后出
②:不会改变彼此的数据(独立的,是一个指向)
③:存在栈里面的数据,内存是可以共享的
![](https://i-blog.csdnimg.cn/blog_migrate/1958191cf020d4581bc9b944ccc6a37e.png)
2.引用类型的栈堆内存的变化
![](https://i-blog.csdnimg.cn/blog_migrate/5d0a7373eff93c8a20884d251da71fd9.png)