#JVM学习笔记(二)HotSpot 虚拟机对象创建

2023/11/30 9:45:34

一.类加载检查

遇到new指令---->指令参数在常量池中定位到这个类的符号引用---->是否被加载过。解析,初始化过

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xa2JKcFE-1665151797156)(image/hotspot对象创建/1664692716392.png)]

二.分配内存

虚拟机为新生对象分配内存,对象所需内存大小在类加载完成后确定,从堆中分配

分配方式有两种:

  • 指针碰撞
  • 空闲列表

1.内存分配两种方式

  • 指针碰撞
    • 适合场景:堆内存规整(没有内存碎片)
    • 原理:用过内存全部整合在一遍,没有用过的在另一边,中间有分界指针,向着没有用过的内存方向将该指针移动对象内存大小位置
    • 使用该分配方式的GC收集器:Serial, ParNew
  • 空闲列表:
    • 适用场景:堆内存不规整
    • 原理:虚拟机维护内存分配列表,会找到足够大小的内存块分配给实例对象
    • 使用该分配方式的 GC 收集器:CMS

2.内存分配并发问题

  • CAS+失败重试:CAS是乐观锁的一种实现方式,每次不加锁,如果冲突就重试直到成功为止
  • TLAB:为每个线程预先在Eden区分配一块内存,JVM在给线程对象分配内存时,首先在TLAB分配,对象大于TLAB中的剩余内存时候,再采用CAS内存分配

三.初始化零值

虚拟机将分配到的内存空间初始化为零值

保证对象的实例字段在 Java 代码中可以不赋初始值就直接使用

四.设置对象头

虚拟机要对对象进行必要设置,例如这个对象是哪个类的实例,如何才能找到类的元数据信息,对象的哈希码,对象的GC分代年龄等信息,这些信息存在对象头中

五.执行init方法

执行构造方法,赋初值

对象内存布局

对象头

  • 实例数据
  • 对齐填充

对象头:

  1. 存储对象自身的运行数据(哈希码,GC分代年龄,锁状态标志)
  2. 类型指针,对象指向他的类元数据的指针,确定对象是哪个类的实例

六.对象访问的定位

句柄

(img-EsFJkMg1-1665151797157)(image/hotspot对象创建/1664697032830.png)]

直接指针

在这里插入图片描述

使用句柄,对象改变,局部变量表的reference不用改变

使用直接指针,对象改变,局部变量表的reference需要改变


http://www.jnnr.cn/a/48836.html

相关文章

Linux正则表达式详解

文章目录1. 什么是正则表达式2. 基础正则表达式2.1 基础正则表达式字符汇整2.2 正则表达式练习3. 相关资料1. 什么是正则表达式 正则表达式是处理字串的方法,他是以行为单位来进行字串的处理行为, 正则表达式通过一些特殊符号的辅助,可以让使…

提高编程效率的5大VS Code插件

前言 作为一名开发人员,大家会一直寻找可以帮助改进日常工作流程的解决方案,VS Code 市场中就有很多优秀的扩展插件程序。 正文 一、GitLive GitLive 是一个出色的扩展程序,它可以实时监控 IDE 内置 Git 的情况,例如团队成员的…

MySQL知识点总结_1

文章目录1. MySQL架构分为几层2.不同存储引擎存储表结构的形式3.InnoDB相较MyISAM优点4. InnoDB的缺点5.其他的存储引擎6.根页面位置万年不动7.内节点中目录项记录的唯一性8.一个页面至少存储2条记录9. MyISAM存储引擎的B树索引结构10.MyISAM和InnoDB对比11.对于InnoDB主键的建…

Open Inventor 10.12 金九银十悄然驾临

The following document contains the release notes for Open Inventor 10.12 破解(September 2022) See below the list of enhancements and new features included in this version. VolumeViz Constrained volume rendering when multiple datasets are blended Perfor…

Kubernetes技术与架构-12

1 前言 2 Kubernetes定义 3 Kubernetes架构 4 Kubernetes技术 4.1 容器化技术 4.1.1 cgroups技术 4.1.2 Docker容器运行环境 4.1.3 containerd容器运行环境 4.1.4 Pod的基本概念 4.1.5 Pod的调度策略 4.1.6 Pod的资源编排 4.1.6.1Deployments 4.…

自动驾驶之-MATLAB环境下利用单目摄像头和语义分割创建占位栅格(occupancy grid)

准备写一些关于自动驾驶方面的东西,以前研究过一些,也比较感兴趣。 本文简单讲解如何使用深度学习语义分割估计车辆可行驶区域(free space),并创建占位栅格(occupancy grid),然后使用占位栅格创建车辆代价…

从零开始应用LSTM网络

数据预处理 该部分包含生成差分数据,归一化,数据缩放,生成监督数据集等。 将数据转换成有监督数据 # codingutf-8 from pandas import read_csv from datetime import datetime from pandas import DataFrame from pandas import concat# …

【Git】如何连接GitHub远程代码仓库?如何提交代码到仓库?如何从仓库中拉取代码?思路详解

文章目录如何连接Github远程代码仓库?本地开发后,如何提交到GitHub仓库?如何从GitHub仓库中拉取项目代码?如果在本地删了一个文件,然后后悔了,怎么找回?如何连接Github远程代码仓库? 目的:将…

超经典!国际著名计算机教育推动者发表计算机原理文档,面面俱到

“一切应该尽可能简单,但也不能过于简单。”——爱因斯坦 尽管要写出一本能够同时满足电子工程系、电子与计算机工程系和计算机科学系的教材几乎是不可能的,但本书进行了有效的折中,它为电子工程系和电子与计算机工程系提供了足够的门级和部件…

智慧小区 HC 系统安装配置简单流程(V2022-09-28)

首先感谢官方 HC 开发(一纸荒年)的指导 ------------- 我的系统为: conetos 8.2(官方建议 7.6 版本较稳定) 登陆空间系统打开 SSH 终端# 第一步骤 1:先安装梓豪平台 1.1:梓豪平台安装是非常简单的,我们可以通过以…

漫步者TWS1普通版

佩戴:耳朵舒适度、音质和听感 耳机的佩戴方式有:头戴式(包耳式、压耳式)、入耳式(平头塞、半入耳) 1)佩戴感受对比: 包耳式——长时间佩戴不会耳朵疼,缺点是体积大&am…

java基于微信小程序的食堂预约订餐系统 多商家 uniapp 小程序

食堂订餐小程序的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与食堂订餐小程序的实际需求相结合,讨论了基于食堂订餐小程序的使用。 环境需要 1.运行环境:微信开发者工具,最好是java jdk 1.8,这是目前最稳定的JDK也是被使用最多…

小程序毕业设计选题推荐springboot智能停车计费小程序 java停车管理小程序 uniapp停车计费管理小程序 ssm+vue停车场管理小程序

💖💖作者:IT跃迁谷毕设展 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等。平常会做一些项目定制化开发…

[HAL库]STM32F103C8T6--使用定时器3产生硬件PWM

写在前面 这篇博客介绍下我是如何使用CubeMX生成基础环境并调用HAL库来产生硬件PWM的。 CubeMX生成过程 103C8T6的通用定时器,1个定时器可以产生4个通道的PWM波,每个通道对应了不同的Pin脚。我这次用的是PB5(TIM3_CHANNEL2)。 分两种办法:…

数据库的约束和设计(完整版)

第一部分(约束和表设计) 1、DQL查询语句-limit语句(掌握) LIMIT是限制的意思,所以LIMIT的作用就是限制查询记录的条数 LIMIT语句格式: SELECT 字段 FROM 表名 LIMIT 索引, 显示条数; 索引:从0开始,一直变化 显示条数:每页显示…

m基于功率谱,高阶累积量和BP神经网络-GRNN网络的调制方式识别仿真,对比2psk,4PSK,2FSK以及4FSK(提供matlab仿真录像)

目录 1.源码获取方式 2.算法描述 3.部分程序 4.部分仿真图预览 1.源码获取方式 使用版本matlab2022a 获取方式1: 点击下载链接(解压密码C123456): m基于功率谱,高阶累积量和BP神经网络-GRNN网络的调制方式识别仿真,对比2p…

【LaTeX算法】(可直接运行)多种类型,是否含end行,自定义函数,对齐方式,支持中文,智能标签等

📢 编译器为xelatex,算法宏包为algorithm2e。 ▚ 00 算法介绍 0.1 控制 \SetAlgoLined:增添end行 \DontPrintSemicolon:不显示行末尾的分号 \SetKwInput{KwInput}{Input}:设置输入 \SetKwInOut{KwInput}{Input}&…

不会接口,加班到死都不会有涨薪,涨薪核心技能“接口自动化测试”全面解析(附学习脑图)

小编热衷于收集整理资源,记录踩坑到爬坑的过程。希望能把自己所学,实际工作中使用的技术、学习方法、心得及踩过的一些坑,记录下来。也希望想做软件测试的你一样,通过我的分享可以少走一些弯路,可以形成一套自己的方法…

mysql版本问题导致项目无法启动的问题

本地项目启动报错 记录一个比较坑的问题,由于mysql版本不同导致了项目启动失败,连接不到数据库等一系列问题。。。 报错原因: com.alibaba.druid.pool.DruidDataSource : init datasource error, url: jdbc:mysql://127.0.0.1:3306/cy_weroom?useUnic…

redis常见基础命令

文章目录redis命令redis基本数据结构redis连接客户端命令通用命令(关于键的)String类型命令key的层级Hash类型的命令List类型的命令Set类型命令SortedSet类型命令redis命令 redis命令参考地址:https://redis.io/commands/、http://redisdoc.com/expire/expire.html …
最新文章