这是我参与「第四届青训营 」笔记创作活动的第3天
1.对象篇
对象的生命旅程
类管理:主要描述一个对象的内存布局与函数信息
内存布局:类成员的大小,类型和排布
函数信息:主要为虚表信息:某一个函数定义在当前类函数表的第几个位置
因为java支持继承,因此均需要做继承链全展开以后才能真正确认(动态性来源)
基类object的秘密
类加载:一个类对象的大小是由继承链决定的,java的类是在第一次使用的时候才会加载
内存布局
双亲继承:为保证系统内同一个类的一致性
合理的继承抽象的好处:优雅架构
内存分配
分配器:APP的java对象内存分配上是托管到VM来处理的,并不会直接向操作系统去申请,实际上对OS内存的占用和内存布局,是VM控制的(预留-扩展)
内存碎片
内存回收:
GC:垃圾回收(Garbage Collection),需要定期查找系统内不用的对象,并且释放占用的内存
RC:引用计数(Reference Counting),指的是对一个对象引用进行计数,多一个引用者,就+1,少一个就-1,为0就释放典型的如IOS的swift就使用RC进行内存管理
虚拟机的执行方式
栈管理:
1.压栈-出栈的速度不同,解释执行的速度慢
2.解释执行的栈结构是托管的,编译执行的栈结构是遵从虚拟机规则的
3.解释执行传递参数有额外的空间成本,编译执行没有
4.不同执行方式之间调用切换采用trampoline/bridge进行