前言:要想理解本文,必须先了解JVM的内存结构

一.创建对象的方式

  • new :最常见
  • 反射 :Class.newInstance()
  • 使用clone()
  • 反序列化

二.创建对象的步骤(对象在JVM中怎么存储?)

  1. 判断对象的类是否加载 ,没加载进行加载
  2. 为对象 分配内存空间
    • 内存规整:采用 指针碰撞 ,指针就是空闲内存和使用过的内存的一个分界点,每次有新的对象,指针就向后移动相应大小的内存空间。(内存规整说明采用 复制算法/标记压缩 算法)
    • 内存不规则: 空闲列表 :JVM维护一个空闲列表,记录哪些内存块可用,有新的对象进入时,,从空闲链表中找到空闲的位置进行分配。
    • 说明:采用哪种方式完全取决于垃圾回收器是否使用内存整理的算法
  3. 处理并发 的问题:使用 TLAB 或者 CAS 保证原子性
  4. 初始化分配到的空间 :给所有的属性赋初始值
  5. 设置对象头
  6. 执行 init方法 :执行代码层面的构造器,完成初始化。

三.对象的内存布局

下图展示了一个对象分配的全过程:

四.对象的访问定位:

创建对象的目的就是为了使用它,那么JVM是如何通过栈帧中的对象引用访问到其内部的对象实例呢?有2种方式:

句柄访问

直接指针:Hotspot采用

寄语: 行动是治愈恐惧的良药,而犹豫、拖延将不断滋养恐惧。

看完如果有帮助,希望可以给个 三连 ,你的鼓励就是我不断前进的动力。谢谢
关注我:私信获取Java高级架构资料、大厂面试试题、视频

对象到底是怎么new出来的相关推荐

  1. 一个Java对象到底有多大?

    点击上方"方志朋",选择"置顶公众号" 技术文章第一时间送达! 出处:http://u6.gg/swLPg 编写Java代码的时候,大多数情况下,我们很少关注一 ...

  2. 一个 Java 对象到底有多大?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 李小武 来源 | http://blog.li ...

  3. 一个Java对象到底占用多大内存?

    最近在调研MAT和VisualVM源码实现,遇到一个可疑问题,两者计算出来的对象大小不一致,才有了这样疑惑. 一个Java对象到底占用多大内存? 为了复现这个问题,准备了4个最简单类: class A ...

  4. java 如何循环执行一个对象_一个Java对象到底有多大?

    编写Java代码的时候,大多数情况下,我们很少关注一个Java对象究竟有多大(占据多少内存),更多的是关注业务与逻辑.但是殊不知,在我们不经意间,大量的内存被无形地浪费了. 一个Java对象到底有多大 ...

  5. 一个Java对象到底占多大内存?(转)

    最近在读<深入理解Java虚拟机>,对Java对象的内存布局有了进一步的认识,于是脑子里自然而然就有一个很普通的问题,就是一个Java对象到底占用多大内存? 在网上搜到了一篇博客讲的非常好 ...

  6. java有几大对象_一个 Java 对象到底有多大?

    阅读本文大概需要 2.8 分钟. 出处:http://u6.gg/swLPg 编写 Java 代码的时候,大多数情况下,我们很少关注一个 Java 对象究竟有多大(占据多少内存),更多的是关注业务与逻 ...

  7. JAVA对象 到底是什么?

    JAVA对象到底是什么? 文章目录 1.前言 2.JAVA对象组成说明 3.对象头的具体组成结构 1.前言 我们用JAVA来编写程序,经常创建对象,那么JAVA中的对象到底是什么?.有哪些东西组成?. ...

  8. 找对象年龄差多大最好_女生找对象到底最看重什么?调查了全球6万多名女性的结果是......

    文/英国那些事儿 微信号:hereinuk "怎么想找个女朋友这么难啊!?" 这种吐槽估计不少单身男生应该都有过,"女生到底对找男朋友都有啥要求啊?!" 这个问 ...

  9. c语言数据结构将链串里所有值为x的字符删除_redis数据结构与对象到底长什么样?...

    写在前面 前方高能!前方高能!前方高能!文章较长,可能需要花费您两个小时的时间,请做好心理准备,但是一旦你准备看下去,我相信您一定会有收获,不枉此行,let's go!!! 一.简单动态字符串 说明: ...

最新文章

  1. 华北计算机研究无人机,飞马D200无人机在华北某环境地调项目中的应用案例
  2. [云炬Mysql数据库笔记] 第2章 数据库设计
  3. c语言变量ppt,C语言程序设计-变量.ppt
  4. 2020牛客国庆集训派对day4 Arithmetic Progressions
  5. spring boot 初始化表
  6. 分析师机构发布中国低代码平台现状分析报告,华为云AppCube为数字化转型加码
  7. ios 判断手机角度_iPhone那么贵,为什么电池还那么小呢?安卓手机电池都那么大了!...
  8. Pandas学习笔记- DataFrame
  9. pb 修改数据窗口种指定字段位置_PB数据窗口对象之字段操作
  10. 2017年“达内杯”台州学院第十届大学生程序设计竞赛 非官方题解
  11. UART/USB UART/USB你必须知道的
  12. 根据生日定时发送生日祝福邮件
  13. Android程序员必备,offer拿到手软
  14. 黑马《linux基础编程》学习笔记(从16到20)
  15. Stata基础(一)
  16. Android.bp入门教程
  17. 密码包含-数字、大小写、特殊字符-正则表达式
  18. 我的世界1月12日服务器维护,我的世界摔落保护指令,我的世界1·17末地更新内容...
  19. hyper-v开虚机
  20. 支持向量机_1: Maximum Margin Classifier

热门文章

  1. Python: self的含义
  2. 励销云全流程智能销售解决方案,助力B2B企业高效增长
  3. 朴素贝叶斯--新浪新闻分类实例
  4. 几种常用的mosfet驱动电路
  5. unity3d 音频无缝循环
  6. qpython3下载-QPython3下载
  7. windows xp 自动登录
  8. 京东商品SKU数据采集方法
  9. GPL和MIT开源协议
  10. Python线程池与进程池