对象到底是怎么new出来的
前言:要想理解本文,必须先了解JVM的内存结构
一.创建对象的方式
- new :最常见
- 反射 :Class.newInstance()
- 使用clone()
- 反序列化
二.创建对象的步骤(对象在JVM中怎么存储?)
- 判断对象的类是否加载 ,没加载进行加载
- 为对象 分配内存空间
- 内存规整:采用 指针碰撞 ,指针就是空闲内存和使用过的内存的一个分界点,每次有新的对象,指针就向后移动相应大小的内存空间。(内存规整说明采用 复制算法/标记压缩 算法)
- 内存不规则: 空闲列表 :JVM维护一个空闲列表,记录哪些内存块可用,有新的对象进入时,,从空闲链表中找到空闲的位置进行分配。
- 说明:采用哪种方式完全取决于垃圾回收器是否使用内存整理的算法
- 处理并发 的问题:使用 TLAB 或者 CAS 保证原子性
- 初始化分配到的空间 :给所有的属性赋初始值
- 设置对象头
- 执行 init方法 :执行代码层面的构造器,完成初始化。
三.对象的内存布局
下图展示了一个对象分配的全过程:
四.对象的访问定位:
创建对象的目的就是为了使用它,那么JVM是如何通过栈帧中的对象引用访问到其内部的对象实例呢?有2种方式:
句柄访问
直接指针:Hotspot采用
寄语: 行动是治愈恐惧的良药,而犹豫、拖延将不断滋养恐惧。
看完如果有帮助,希望可以给个 三连 ,你的鼓励就是我不断前进的动力。谢谢
关注我:私信获取Java高级架构资料、大厂面试试题、视频
对象到底是怎么new出来的相关推荐
- 一个Java对象到底有多大?
点击上方"方志朋",选择"置顶公众号" 技术文章第一时间送达! 出处:http://u6.gg/swLPg 编写Java代码的时候,大多数情况下,我们很少关注一 ...
- 一个 Java 对象到底有多大?
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 李小武 来源 | http://blog.li ...
- 一个Java对象到底占用多大内存?
最近在调研MAT和VisualVM源码实现,遇到一个可疑问题,两者计算出来的对象大小不一致,才有了这样疑惑. 一个Java对象到底占用多大内存? 为了复现这个问题,准备了4个最简单类: class A ...
- java 如何循环执行一个对象_一个Java对象到底有多大?
编写Java代码的时候,大多数情况下,我们很少关注一个Java对象究竟有多大(占据多少内存),更多的是关注业务与逻辑.但是殊不知,在我们不经意间,大量的内存被无形地浪费了. 一个Java对象到底有多大 ...
- 一个Java对象到底占多大内存?(转)
最近在读<深入理解Java虚拟机>,对Java对象的内存布局有了进一步的认识,于是脑子里自然而然就有一个很普通的问题,就是一个Java对象到底占用多大内存? 在网上搜到了一篇博客讲的非常好 ...
- java有几大对象_一个 Java 对象到底有多大?
阅读本文大概需要 2.8 分钟. 出处:http://u6.gg/swLPg 编写 Java 代码的时候,大多数情况下,我们很少关注一个 Java 对象究竟有多大(占据多少内存),更多的是关注业务与逻 ...
- JAVA对象 到底是什么?
JAVA对象到底是什么? 文章目录 1.前言 2.JAVA对象组成说明 3.对象头的具体组成结构 1.前言 我们用JAVA来编写程序,经常创建对象,那么JAVA中的对象到底是什么?.有哪些东西组成?. ...
- 找对象年龄差多大最好_女生找对象到底最看重什么?调查了全球6万多名女性的结果是......
文/英国那些事儿 微信号:hereinuk "怎么想找个女朋友这么难啊!?" 这种吐槽估计不少单身男生应该都有过,"女生到底对找男朋友都有啥要求啊?!" 这个问 ...
- c语言数据结构将链串里所有值为x的字符删除_redis数据结构与对象到底长什么样?...
写在前面 前方高能!前方高能!前方高能!文章较长,可能需要花费您两个小时的时间,请做好心理准备,但是一旦你准备看下去,我相信您一定会有收获,不枉此行,let's go!!! 一.简单动态字符串 说明: ...
最新文章
- 华北计算机研究无人机,飞马D200无人机在华北某环境地调项目中的应用案例
- [云炬Mysql数据库笔记] 第2章 数据库设计
- c语言变量ppt,C语言程序设计-变量.ppt
- 2020牛客国庆集训派对day4 	Arithmetic Progressions
- spring boot 初始化表
- 分析师机构发布中国低代码平台现状分析报告,华为云AppCube为数字化转型加码
- ios 判断手机角度_iPhone那么贵,为什么电池还那么小呢?安卓手机电池都那么大了!...
- Pandas学习笔记- DataFrame
- pb 修改数据窗口种指定字段位置_PB数据窗口对象之字段操作
- 2017年“达内杯”台州学院第十届大学生程序设计竞赛 非官方题解
- UART/USB UART/USB你必须知道的
- 根据生日定时发送生日祝福邮件
- Android程序员必备,offer拿到手软
- 黑马《linux基础编程》学习笔记(从16到20)
- Stata基础(一)
- Android.bp入门教程
- 密码包含-数字、大小写、特殊字符-正则表达式
- 我的世界1月12日服务器维护,我的世界摔落保护指令,我的世界1·17末地更新内容...
- hyper-v开虚机
- 支持向量机_1: Maximum Margin Classifier