2.1 Java虚拟机的内存划分
为了提高运算效率,就对空间进行了不同区域的划分
因为每一片区域都有特定的处理数据方式和内存管理方式
JVM的内存划分
2.2数组在内存中的存放
一个数组内存图
int [] array 数组的名称就是变量
new出来的内容,都是在堆内存中存储的,而方法中的变量保存的就是数组的地址
new出来的数组是在堆heap当中的,而数组变量是在栈stack当中的,而栈中变量存储的就是地址值
有了这个地址值就可以找到数组。
System.out.println(array) 输出的就是数组的地址值
执行流程:
两个数组内存图
两个变量指向一个数组
3.1 对象内存图
1一个对象调用一个方法内存图
main()方法先进栈,call()方法再进栈,然后是sendMessage()方法进栈
调用call方法,运行完后立即弹栈,即从栈内存当中消失
sendMessage方法进栈,运行完后立即从栈空间消失
最后到达main方法最后一行,main方法运行完后也出栈
所有内存不见,程序停止。
在栈内存中运行的非方法,遵循“先进后出,后进先出”的原则
成员方法保存的是地址值
2两个对象调用同一方法内存图
对象调用方法时,根据对象中方法标记(地址值),去类中寻找方法信息。这样哪怕是多个对象,方法信息只保存一份,节约内存空间
3两个引用指向同一个对象内存图
引用类型作为参数,传递的是地址值