对象的实例化,内存布局与访问定位
一.对象的实例化
面试题
对象在JVM中是怎么存储的
对象头信息里面有那些东西
创建对象的步骤
测试对象初始化的过程:6步
1> 加载元信息
2> 为对象分配内存空间
3> 处理并发问题
4> 属性默认初始化(零值初始化)
5> 设置对象头信息
6> 属性的显式初始化,代码块中初始化,构造器中初始化
二.对象的内存布局
三.对象的访问定位
句柄访问图示
堆空间中需要单独维护一块句柄空间,会有点浪费空间,好处是在堆中的对象进行位置移动的时候,对象的引用因为是指向句柄的,所以只需要更改句柄中的对象的地址就可以,不需要更改对象中的引用地址
直接指针访问(Hotspot使用)
四.直接内存(Direct memory)
概述
示例
public class BufferTest {
/**
* 1GB
*/
private static final int BUFFER = 1024 * 1024 * 1024;
public static void main(String[] args) {
ByteBuffer byteBuffer = ByteBuffer.allocateDirect(BUFFER);
System.out.println("直接内存分配完毕.....");
Scanner scanner = new Scanner(System.in);
scanner.next();
System.out.println("直接内存开始释放.....");
byteBuffer = null;
System.gc();
scanner.next();
}
}
非直接缓冲区
直接缓冲区