请根据如下程序代码,画出对应的内存管理图(不需要画方法区),并写出输出结果。
1.
public class Cell{
int row;
int col;
public Cell(int row,int clo){
this.row=row;
this.col=col;}
public static void main(String []args){
Cell c=new Cell(2,5);
System.out.println("row:"+row+",col:"+col);
}
}
思路解析:
这题是内存管理的一道基础题,考察的是局部变量、实例变量、new出来的对象分别应该放在哪个位置(堆还是栈),难度不是很大。
结果如下:
输出结果为:row:2,col:5
2.
public class Test{
public static void main(String []args){
int [] arr=new int[]{10,30,50};
int a=8;
modify(arr,a);
System.out.println("arr:"+Arrays.toString(arr));
System.out.println("a的值:"+a);
}
public static void modify(int [] arr,int a){
arr[0]=5;
a=45;
}
}
思路解析:
这依然是内存管理的一道基础题,比起上题多考验了一个main方法以外的方法内的局部变量的内存管理。方法调用时分配内存,方法调用结束后移除即可。
结果如下:
输出结果为:
arr:[5,30,50]
a的值:8
每日笔记:
JVM将内存分为了几个区域,每个区域都存储的是什么?
JVM会将申请到的内存从逻辑上划分为三个区域:堆、栈、方法区。这三个区域分别用于存储不同的数据。
堆:用于存储使用new关键字所创建的对象以及对象的属性成员变量。
栈:用于存储程序运行时在方法中声明的所有的局部变量。
方法区:用于存放类的各种信息(包括方法)、静态变量、常量池等都在方法区存储。