1.对象的创建过程

  1. class loading
  2. class linking(verification,preparation,resolution)
  3. class initializing
  4. 申请对象内存
  5. 给对象的成员变量赋默认值
  6. 调用构造方法
    • 成员变量顺序赋初始值
    • 执行构造方法语句(如果有父类,则先调用父类的构造方法)

2.对象在内存中的存储布局

由于对象在内存中分配非常的依赖环境配置,所以先看下虚拟机的配置

1.观察虚拟机的配置

java -XX:+PrintCommandLineFlags -version

  • 普通对象(

new Object() = 12个字节(对象头+classpoint = 12,由于有padding对齐:8的倍数,因此至少为16个字节)

对象头:markword 8个字节

ClassPoint指针:(默认4个字节)

指向xxxx.class源文件

-XX:+UseCompressedClassPointers 为4字节 不开启为8字节

实例数据(成员变量,没有成员变量则为0):

引用类型:-XX:+UseCompressedOops 为4字节 不开启为8字节

Padding对齐

不占用内存,知识一个对象的内存分配规则:以8的倍数为单位分配,比如new Object是12,但还是要分配16个字节

  • 数组对象(默认20字节,关闭classpoint压缩时为24字节)

比普通对象多了一个数组长度(4个字节)

3.对象头具体包括什么

  • 锁状态信息两位代表对象有没有被锁定
  • GC标记被回收了多少次了,分代年龄

4.对象怎么定位,即T t = new T();这个t时如何找到这个对象的?

参考文章:https://blog.csdn.net/clover_lily/article/details/80095580
  1. 句柄池
  2. 直接指针

这两者没有优劣之分,有的虚拟机使用句柄池,有的虚拟机使用直接指针

HotSpot使用的是直接指针,直接指针效率比较高直接找到对象,

句柄池要找一个指针再找下一个,但是GC的时候效率比较高

5.Object c = new Object()在内存中占用多少字节?

普通对象:16字节

mark word(8)

class point(4)

padding(4) = 16

new int[] :16个字节

mark word(8)

class point(4)

数组长度(4)

padding(0) = 16

7.为什么GC年龄默认为15?

最大是15

最新文章

  1. stm8s103串口
  2. 函数fgets和fputs、fread和fwrite、fscanf和fprintf用法小结 (转)
  3. SPF详解
  4. VS项目重命名工具
  5. Android OpenCV实现图片叠加,水印
  6. CodeForces 701C They Are Everywhere 尺取法
  7. C++ Primer 有感(标准库vector及迭代器)
  8. jsp映射为其他地址上去 ???
  9. 三 drf 认证,权限,限流,过滤,排序,分页,异常处理,接口文档,集xadmin的使用
  10. Omi框架学习之旅 - 插件机制之omi-router及原理说明
  11. Shell----简单整理
  12. 消除JQuery Mobile 列表样式右侧箭头
  13. 查看Oracle数据库名和实例名的命令
  14. eval是只读数据,bind是可更新的.
  15. windows下MySQL的安装(非安装包)
  16. mybatis单笔批量保存
  17. 用TextWriterTraceListener实现log文件记录 (转载)
  18. OSPF协议介绍及配置 (上)
  19. sql中表级约束和列级约束
  20. Drupal theme_hook

热门文章

  1. Springboot整合Spring Cloud Kubernetes读取ConfigMap,支持自动刷新配置
  2. qqmini
  3. Android Studio从Eclipse导项目
  4. KUDU 学习笔记
  5. Spring Boot入门,源码解析
  6. 虚拟机:主机能ping通虚拟机,虚拟机不可以ping通主机
  7. Tomcat +Nginx+Redis实现session共享
  8. java里的锁总结(synchronized隐式锁、Lock显式锁、volatile、CAS)
  9. HTTP协议(二)---请求和响应
  10. C# 9.0 新特性预览 - 顶级语句