出处:图片来自黑马程序员b站视频 这是我学习之后的笔记
jdk8之后取消了方法区 用元空间取代 但这不影响我们区理解Java内存分配
下面的图片就是Java 虚拟机的内存
今天主要学习对象的内存分配 Java虚拟机内存分配可以点个关注 我Java文章有写
以下面的代码为例子:
对照上面的代码 调用方法时 主方法 字节码文件 teststudent.class 会先加载到方法区
方法运行的时候 会自动调用main主方法 创建临时内存 此时main方法入栈
这时候new 一个对象 就会在堆里面开辟空间 并且产生地址
如果对象里面的变量没有初始化 计算机系统会自动默认初始化 自定义了初始值 就不会自动初始化变量
构造的方法 比如无参有参都会自动初始化 如果我们自己构造了系统就不会默认初始化
【这里对默认初始化不明白的可以去看我的Java内存那一篇 和数组内存那一片可以帮助理解】
这时候方法里面就可以调用堆内 的内存地址
从而输出地址指向的值
new出的对象 地址里面还包含了成员方法的地址
所以代码就成功调用了student下的study()方法,
当程序里面的方法调用完毕之后就会出栈
这时候main方法也就结束了 main方法出栈,
堆里面的东西也就相应的退出了 至此程序彻底执行完毕。
基本数据类型 和引用数据类型的内存特点:
基本数据类型一般有整数 浮点数之类的
Java有 5种引用类型(对象类型):类 接口 数组 枚举 标注