java对象创建过程
- 类加载检查
- 检查new指令的参数是否在常量池中定位到一个类的符号引用
- 检查该类符号引用代表的类是否已被加载、解析和初始化过
- 如果没有,则会进行类加载过程(加载、验证、准备、解析、初始化)
- 为对象分配内存
- java堆内存规整——指针碰撞
- java堆内存不规整——空闲列表
- 常用方法——本地线程分配缓冲(TLAB)
- 将内存空间初始化为0
- 保证了对象的实例字段在使用时可不赋初始化值就直接使用
- 对对象头进行必要的设置
- 设置该对象是哪个类的实例、如何才能找到类的元数据信息、对象的哈希码、对象的gc分代年龄等信息
MVCC实现原理
- update
- 对该行加排他锁
- 把该行原本的值拷贝到undo log中
- 修改该行的值产生一个新版本,更新DATA_TRX_ID(更新这条记录的事务ID),将DATA_ROLL_PTR(指向该行回滚段的指针)指向刚刚拷贝到undo log中的旧版本记录
- 释放排他锁
- insert
- 产生一条新记录
- DATA_TRX_ID为当前插入记录的事务ID
- delete
- 一种特殊的update
- 软删
- 在commit时真正执行删除操作
- DATA_TRX_ID记录删除该纪录的事务ID
自动装箱 自动拆箱
Integer a=100;
Integer b=100;
Integer c=200;
Integer d=200;
System.out.println(a==b);
System.out.println(c==d);
int tmp=a;
System.out.println(tmp);