Java 面向对象的底层原理
·
1. 面向对象的内存管理
1.1 Java中的内存管理
栈内存:
每个线程都有自己独立的栈,目前只要考虑一个即可,方法被调用进栈执行,执行完毕出栈
简单理解:栈跟方法有关
堆内存:
所有线程共享,存储对象、数组、字符串常量池
简单理解:堆跟new关键字有关,只要通过new关键字开辟的小空间都是开在堆内存中的
方法区:
JDK7永久代实现,JDK8+元空间实现,从虚拟机内部移到本地内存。存储字节码信息、常量、静态变量
简单理解:方法区是存储class字节码文件的, 当运行一个类的时候,会把这个类的字节码文件加载到内存中临时存储
本地方法栈:
调用本地Native方法
程序计数器:
每个线程独立、记录当前线程执行的字节码指令地址(行号)
1.2 Java中对象的内存分配

- stu记录的是内存地址
Student stu= new Student();创建对象的七步:- 加载class字节码文件
- 申明等号左边的局部变量:
- 在堆里面开辟一个空间(对象)
- 给对象中的属性进行默认初始化
- 给对象中的属性进行显示初始化
- 给对象中的属性利用构造方法进行初识化
- 把对象的内存地址赋值给等号左边的变量
- 方法出栈之后,方法里面的变量全部消失
- 如果没有任何地方使用堆里面的对象,那么对象也会从堆里面消失
- 方法区里面字节码信息一般不会消失,除非关闭虚拟机
1.3 Java中对象在内存中的传递
- 类似c/cpp中的指针思想

- 将一个对象传递给一个方法, 实际传递的是对象的内存地址
- 当多个变量指向同一个对象时, 只要由一个变量修改了对象中的属性, 其他变量再次访问就是修改之后的结果了
2. this关键字的真正原理
- this本质: 代表所在方法调用者的地址值

更多推荐

所有评论(0)