JVM-3

HotSpot虚拟机对象

我在网上看了很多相关的文章,发现在创建对象和对象的结构中内容都不太一样,一些关键字也很不同,于是我通过参考《深入理解Java虚拟机》这本书,自己总结了一篇。

1.对象的创建

  1. 当JVM收到一条创建对象的字节码new指令时,会先去检查这个指令的参数能否能在常量池中定义到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载,解析和初始化过,如果没有就先执行相应的类加载过程。
  2. 在类加载检查通过以后,就为新生对象分配内存,从堆中进行划分,划分方式有两种:指针碰撞,空闲列表,根据堆内存是否时规整的进行选择,规整的话就是指针碰撞,不规整就是空闲列表,当然,堆内存是否规整又由所采用的垃圾收集器是否带有空间压缩整理的能力决定。
  3. 内存分配完成之后,虚拟机必须将分配的内存空间(但不包括对象头)都初始化为0(这步操作保证了对象的实例字段在Java代码中可以不赋初始值就直接使用,使程序能访问到这些字段的数据类型所对应的零值)
  4. 对对象进行必要的设置。

2.对象的内存布局

在HotSpot虚拟机里,对象在堆内存中的存储布局可以划分为三个部分:对象头,实例数据,对齐填充。

对象头由两部分组成:

  • 第一部分存储对象自身的运行时数据:哈希码、GC分代年龄、锁标识状态、线程持有的锁、偏向线程ID(一般占32/64 bit)。
  • 第二部分是指针类型,指向对象的类元数据类型(即对象代表哪个类)。

如果是数组对象,则对象头中还有一部分用来记录数组长度。

实例数据用来存储对象真正的有效信息(包括父类继承下来的和自己定义的)

对齐填充:JVM要求对象起始地址必须是8字节的整数倍(8字节对齐)

3.判断对象是否能被回收

判断对象是否能被回收需要先判断对象是否存活,而判断对象是否存活一般有两种方式:

引用计数:每个对象有一个引用计数属性,新增一个引用时计数加1,引用释放时计数减1,计

数为0时可以回收。此方法简单,无法解决对象相互循环引用的问题。

可达性分析(Reachability Analysis):从GC Roots开始向下搜索,搜索所走过的路径称为引

用链。当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的,是不可达对

象。

原文链接:JVM · 语雀

近日总结:最近好困啊,早上起来困的难受,学习的时候头晕眼花的,我觉得我应该是因为早上没有吃早饭所以才这样的,看来以后得吃早饭了,或者是吃多点,唉,难受。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/738125.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用定时器在单片机中实现一次性回调函数执行

在单片机中实现一个异步的一次性定时器,通常可以使用硬件定时器模块或者嵌入式操作系统中的定时器功能。以下是一个基于硬件定时器的实现方法,适用于没有操作系统的情况: 1.硬件定时器配置: 选择单片机中的一个硬件定时器&#…

计算机网络 路由器 链路层 MTU 最大传送单元 网络层

一个链路层数据帧能够承载的最大数据量,被称为最大传送单元(MTU)。 因为IP数据报,被封装在链路层的帧中,因此链路层的MTU,严格地限制了IP数据报的长度,并且在IP数据报的源与目的路径上的各段链…

全面的 DevSecOps 指南:有效保护 CI/CD 管道的关键注意事项

数字化转型时代带来了对更快、更高效、更安全的软件开发流程的需求。DevSecOps:一种将安全实践集成到 DevOps 流程中的理念,旨在将安全性嵌入到开发生命周期的每个阶段 - 从代码编写到生产中的应用程序部署。DevSecOps 的结合可以带来许多好处&#xff0…

交叉编译x264 zlib ffmpeg以及OpenCV等 以及解决交叉编译OpenCV时ffmpeg始终为NO的问题

文章目录 环境编译流程nasm编译x264编译zlib编译libJPEG编译libPNG编译libtiff编译 FFmpeg编译OpenCV编译问题1解决方案 问题2解决方案 总结 环境 系统:Ubutu 18.04交叉编译链:gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu 我的路径/opt/toolch…

NLP:bert下载与使用

没办法,模型精度还是不够,只能暂时弃用text2vec。然后我在github上发现了中文文本处理的老大哥:bert python使用bert可以参考这篇博客:博客 但是篇博客又出现了上一节的问题: We couldnt connect to https://hugging…

数据库相关理论知识(有目录便于直接锁定相关知识点+期末复习)

一,数据模型,关系型数据模型,网状模型,层次模型 1.数据库模型是用来描述和表示现实世界中的事物、概念以及它们之间的关系的工具,但是并不是越专业越好,还要平衡它的模型的复杂性、通用性和成本效益等因素…

【Vue】vue文件外通过ref获取元素

问题描述 我在abc.js写HomeView.vue的逻辑代码我要在abc.js里,获取HomeView.vue组件里ref为test的元素 码 abc.js 导出test import { ref } from vue const test ref() export {test } HomeView.vue 引入test注意: ref不能加冒号,也就…

Java零基础入门-Comparable vs Comparator(上)

哈喽,各位小伙伴们好,我是喵手。 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流学习,互相学习,才能成长的更快,对吧。 我是一名java开发,所以日常接触到最多…

System是什么?为什么不能直接输出null?

在看学习下面的知识前,得先对java核心类库有个大致的了解,详情可参考链接 java基本概念-扩展点-CSDN博客 1、System 1.1 System是什么? System是一个类,它包含了一些有用的属性和方法。 1.2 System实现的功能 (1&…

linux下如何hook第三方播放器的视频数据?

背景 作为显卡生产商,当用户使用我们的显卡硬解码播放视频时,如果出现比如花屏等问题,为了快速确定问题原因,我们需要一个工具来帮助判断出问题是出在原始视频端,亦或者是应用程序端,亦或者是显卡端。因此我们需要一种方法,来对目标播放器程序进行监控,并捕获到视频源的…

【深度学习】换脸新科技,InstantID: Zero-shot Identity-Preserving Generation in Seconds

论文:https://arxiv.org/abs/2401.07519 代码:https://github.com/InstantID/InstantID demo:https://huggingface.co/spaces/InstantX/InstantID 文章目录 1 引言2 相关工作2.1 文本到图像扩散模型2.2 主题驱动的图像生成2.3 保持ID的图像生成 3 方法3.…

简易线程池的实现

Worker的实现 总体来说我们首先需要实现一个Worker线程类,让他的线程实例拿取任务然后执行任务。 //worker主要是从jobs中拿工作,拿不到等,拿到了执行。class Worker implements Runnable{private volatile boolean running true;Overrid…

工程经济学一

工程项目: 工程项目是指为完成某一独特的产品、服务或任务所做的一次性努力。又称建设项目、基本建设项目、投资建设项目或建设工程项目。 工程项目前评价: 是项目建议书和可行性研究阶段进行的,是项目开工前对 拟建项目的必要性和可能性进…

删除、创建、验证Kafka安装自带的__consumer_offsets topic

删除Kafka自带Topic 一般情况下,你删除Kafka自带的__consumer_offsets topic,会报错提示不能删除。 倔强的你直接找到zookeeper删掉了它,list查看确实没有这个topic了,但是这会导致消费者和偏移量无法记录。 创建Kafka自带的Topi…

zabbix5监控tomcat

zabbix tomcat客户端配置 1、配置tomcat catalina.sh文件 CATALINA_OPTS"$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port12345 -Dcom.sun.management.jmxremote.authenticatefalse -Dcom.sun.management.jmxremote.sslfalse -Djav…

smart-doc 社区 Committer 晋升公告

我们非常荣幸地宣布,经过 PMC 委员会的提名和讨论,社区成员李星志(GitHub ID: netdied)、陈琪(GitHub ID: chenqi146)和李兵(GitHub ID: abing22333)正式晋升为同程旅行 smart-doc 开…

Vue3全家桶 - Vue3 - 【3】模板语法(指令+修饰符 + v-model语法糖)

一、模板语法 主要还是记录一些指令的使用和vue2的区别;vue3指令导航; 1.1 v-text 和 v-html 指令的区别: v-text: 更新元素的文本内容;v-text 通过设置元素的 textContent 属性来工作,因此它将覆盖元素…

数据结构:静态链表(编程技巧)

链表的元素用数组存储, 用数组的下标模拟指针。 一、理解 如果有些程序设计语言没有指针类型,如何实现链表? 在使用指针类型实现链表时,我们很容易就可以直接在内存中新建一块地址用于创建下一个结点,在逻辑上&#x…

3、设计模式之工厂模式

工厂模式是什么?     工厂模式是一种创建者模式,用于封装和管理对象的创建,屏蔽了大量的创建细节,根据抽象程度不同,主要分为简单工厂模式、工厂方法模式以及抽象工厂模式。 简单工厂模式 看一个具体的需求 看一个…

重拾C++之菜鸟刷算法第11篇---回溯算法(上)

今天是个好日子,二月二龙抬头,龙年龙日龙抬头,顺风顺水好兆头,万事万物开好头,金银珠宝往家里走!offer往家走! 回溯算法 回溯法可以解决的问题 组合问题:N个数里面按照一定规则找…