IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 深入理解java中创建的对象 -> 正文阅读

[Java知识库]深入理解java中创建的对象

深入理解java中创建的对象

java中对象的创建方法

  1. 使用new关键字(也是大家平时最常用的)
  2. Class类的newInstance方法
  3. clone
  4. 反序列化。
    等方式

java中创建对象的具体步骤以及细节

1.当java虚拟机遇到一条new指令的时候,首先会去检查这个指令的参数是否能在常量池中找到一个类的符号引用,并且检查这个符号引用所代表的类是否加载,解析,初始化等过程。若没有,则进行上诉过程。

  1. 为对象分配内存(两种方式)
    . List item

    (1) 如果内存规整------指针碰撞
    何为指针碰撞?画个图自然就理解了:由图可知,s3 为新创建的对象,由于内存是规整分配的,所以当新来得s3 对象需要内存空间的时候,只需要将指针p往后移动即可为s3 分配相对应的内存。由图可知,s3 为新创建的对象,由于内存是规整分配的,所以当新来得s3 对象需要内存空间的时候,只需要将指针p往后移动即可为s3 分配相对应的内存。

  •  (2)如果内存不规整-----空闲列表
    
  • 何为空闲列表?顾名思义就是java虚拟机在后台维护了一个列表,表中记录了哪些内存地址是空闲的,哪些内存地址是占用的,当有新来得对象需要空间时,就可以查询空闲列表得知那块内存空间是空闲的然后为该新来得对象分配空间。

3.处理并发问题,由于在java虚拟机中创建对象时非常频繁的,当你仅仅修改一个指针时,这种在并发情况下是很不安全的。于是jvm提供了两种方式解决并发问题。
(1):采用CAS配上失败重试来保证更新操作的原子性。
何为CAS?
CAS是靠硬件实现的,是一条cpu指令,基于汇编指令。
CAS是Compare-and-swap的缩写,意思为:比较并交换。
要理解CAS,首先得知道CAS中包含了三个操作数即: 内存值(V),预期原值(A),新值(B)。
来谈一谈 CAS的工作原理: 当预期原值A与内存值V相同时,将内存值修改为新值B,并返回true,否则什么都不做并且返回false当CAS指令执行时,当且仅当内存值V等于预期原值A时,才会将V的值设为新值B。所以在多线程情况下,当多个线程同时使用CAS操作一个变量时,只会有一个会成功,并更新值,其余线程均会失败,但失败的线程不会被挂起,而是不断地再次循环重试。
(2):为每个线程预生成一个TLAB。

何为TLAB?画个图自然清楚。
图中每个红色区域为一个tlab,即为每个线程在java堆中预先分配的一块内存空间。哪个线程需要分配内存就在哪个线程的tlab中分配。
4.初始化分配到的空间。
所有属性设置默认值,保证对象实例字段在不赋值时也可以直接使用。
5.设置对象的对象头
何为对象头?对象头中包含了什么?画个图自然清楚。
上图可清楚的明白什么是对象头,对象头中包含了什么。
6.执行init()方法进行初始化。(显式初始化,代码块构造器中初始化)

     **经过上面6个步骤,对象即可被创建,期中一些细节问题可能还理解不是很到位,若有不足之处欢迎大家评论一起交流关于对象创建的一些细节**
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-11-19 17:30:07  更:2021-11-19 17:31:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:31:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码