对象实例化内存布局与访问定位
时间:2021-07-29
本文章向大家介绍对象实例化内存布局与访问定位,主要包括对象实例化内存布局与访问定位使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1. 创建对象的方式:
- new:使用new 关键字创建对象,最常见的方式
- Class 的 newInstance():反射方式,只能调用 public 修饰的空参的构造器
- Constructor 的 newInstance(args):反射方式,可以调用空参、带参的构造器,权限没有要求
- 使用 clone():不调用任何构造器,当前类需要实现 cloneable() 接口
- 使用反序列化
- 第三方库:Objenesis 等
2. 对象创建流程:
- 类加载器首先判断当前对象的类是否加载、链接、初始化
- 为对象分配内存
- 处理并发安全问题:如果开启了TLAB且TLAB足够分配,直接在 TLAB 分配内存,否则采用 CAS机制保证更新的原子性
- 初始化分配到的空间:所有属性设置默认值
- 设置对象的对象头
- 执行对象的 init 方法:初始化代码块,执行构造器
3. 对象的访问定位:对象的访问方式有两种,基于句柄的方式和直接指针的方式
- 基于句柄的方式:堆中额外开辟出一个句柄池,句柄池中的每一个句柄都与堆中的一个对象相关联,栈引用句柄池中的句柄从而间接引用对象,这种好处是堆在发生压缩整理时只改变句柄就可以,栈中的引用不需要变动,坏处是发生了两次引用
- 直接指针的方式:栈直接引用对中的对象,少了一次引用过程,但是堆在发生整理压缩时需要修改栈中的引用指针
原文地址:https://www.cnblogs.com/programmlover/p/15076114.html
- 小学生都学Python了,你还不知道怎么开始
- java实现最基础的socket网络通信
- struts的声明式异常处理 demo
- npm管理工具介绍
- 对windows密码抓取神器mimikatz的逆向分析
- Keras中神经网络模型的5阶段生命周期
- java的断言(assert)
- Android studio中Rendering Problems不能可视化操作的解决办法
- 使用 Referer Meta 标签控制 referer—详解 referrer-policy
- 网站抓取引子 - 获得网页中的表格
- Android Firebase 服务简介
- CVE-2015-0393:Oracle发布严重安全漏洞预警
- 研究人员发现一种利用Siri窃取苹果iPhone/iPad数据的方法
- 关于Python中的__main__和编程模板
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android中menu使用详解
- SimpleCommand框架介绍以及简单使用(一)
- Android开发中使用achartengine绘制各种图表的方法
- Android开发中Listview动态加载数据的方法示例
- Android自定义实现顶部粘性下拉刷新效果
- Android开发使用自定义view实现ListView下拉的视差特效功能
- Android打造炫酷进度条效果
- Android开发实现自定义新闻加载页面功能实例
- Android下Activity间通信序列化过程中的深浅拷贝浅析
- Android升级支持库版本遇到的两个问题详解
- Android开发使用Drawable绘制圆角与圆形图案功能示例
- Android开发中自定义ProgressBar控件的方法示例
- Android 使用自定义RecyclerView控件实现Gallery效果
- Android开发中GridView用法示例
- React Native中Android物理back键按两次返回键即退出应用