JVM面试题总结

news2024/11/23 20:39:25

一.请简述对象的创建过程

 对象的new字节码执行指令如下图 
首先0指令new出一片内存空间,然后进行对象的初始化,初始化完成前变量都是初始值如m=0
然后创建连接,t指向对象。

 二.DCL单例要不要加volatile?

DCL单例就是要懒汉式从创建单例对象,通过双重检查锁的方式
DCL  (Doouble Check Lock)双重检查锁 
单例 设计模式

 一定要加volatile 因为再创建对象过程中 要进行双重检查,第二次检查时对象发生指令重排就会造成没有进行完初始化,连接就完成了就会造成对象处于半初始化状态不为空,打破单例。
(cpu为什么进行指令重排?cpu的速度要比内存快好多,为了不发生等待优化系统指令内部进行的操作)

三.对象在内存中的布局

1.mrakword(8)(锁信息 hash信息 gc信息)和classpointer(4)共同构成对象头(objectheader) 
对象是数组,那么额外增加4个字节存储数组的长度(4)
类型指针是指向方法去中的instenceklass(保存对象的全部数据)
对齐是虚拟机要求对象大小是8的倍数,所以需要补齐

通过JOL查看jvm信息 

<dependency>

<groupId>org.openjdk.jol</groupId>

<artifactId>jol-core</artifactId>

<version>0.9</version>

</dependency> 

public class Test01 {
    public static void main(String[] args) {
        Object o = new Object();
        System.out.println(ClassLayout.parseInstance(o).toPrintable());
    }
}

四.对象是怎么定位

 五.对象是怎么分配的  (TLAB线程本地缓冲区)

 六.类的加载

首先类的加载经过三个主要阶段,加载连接初始化
其中连接又分为验证,准备,解析三个阶段
首先是java采用了oop-klass模型表示java对象,
在类的加载阶段会创建一个instanceklass对象存放在方法区中,
这里的方法区是抽象概念不同的jdk版本有不同的实现
主要保存的是类的元信息,同时会创建instancemirrorklass对象
存放在堆区,用于反射,这个对象成为镜像,虚拟机不会将instanceklass对象暴露给java
而是利用他的镜像创建对象,创建的对象指向instanceklass,因为互相指向所以能够获取镜像
验证阶段主要是验证元数据,字节码文件等
准备阶段进行静态变量的内存分配以及初始化
解析阶段将其间接引用变为直接引用,符号引用对象B,这时就会触发B的加载变为直接引用
初始化阶段执行静态代码块,静态变量的真正赋值

七.加载器(双亲委派)

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

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

相关文章

广州市番禺区委领导一行莅临和鲸科技考察交流

7月18日下午&#xff0c;广州市番禺区区委常委、组织部部长、人才工作局局长唐力明&#xff0c;组织部副部长、两新工委书记罗翌洁及组织部其他相关领导一行莅临和鲸科技开展实地考察与调研&#xff0c;国投科创广州基地负责人、海创人才南方创业服务中心常务副秘书长徐斌&…

中小企业部署MES管理系统需要考虑哪些问题

随着制造业的快速发展&#xff0c;越来越多的中小企业开始意识到数字化管理的重要性。为了提高生产效率、降低成本、提升品质及满足客户需求&#xff0c;部署MES生产管理系统成为了中小企业实现数字化转型的关键一步。然而&#xff0c;在部署MES管理系统时&#xff0c;中小企业…

公开讲座笔记 | 雷达学报 雷达系统微课 - 第三讲 相控阵雷达 与 “1+1=2“

原文链接&#xff1a;https://mp.weixin.qq.com/s?__bizMzg4MjgxMjgyMg&mid2247486366&idx2&sn242bd062b6bcd1d32acba16a148f58c9&chksmcf51b967f8263071d912a178881c7ff3c4143b78201c30723a8c121cc53f47ade584a918648c#rd 第三讲 相控阵雷达 与 “112” 主讲…

JavaScript数组所有方法集合

##方法 1、concat 用于合并两个或多个数组。此方法不会更改现有数组&#xff0c;而是返回一个新数组 2、copyWithin 浅复制数组的一部分到同一数组中的另一个位置&#xff0c;并返回它&#xff0c;不会改变原数组的长度 3、entries 返回一个新的 Array Iterator 对象&#xf…

最新版本的OpenLens,有两个隐藏技能

最新版本的OpenLens v6.4.15&#xff0c;有两个隐藏技能 1、需要添加扩展插件alebcay/openlens-node-pod-menu&#xff0c;查看pod时才会出现进入命令行的按钮 2、测试环境查看pod、node时可能会出现监控数据未显示&#xff0c;点击集群的Setting&#xff0c;在Metrics里选…

网页性能优化,各种指标检测,谷歌统计使用,pagespeed

每日鸡汤&#xff1a;每个你想要学习的瞬间都是未来的你像自己求救 前端性能优化是个很重要的模块&#xff0c;但是如何查看性能优化后的网页的效果也是很重要的&#xff0c;要从技术的层面总结&#xff0c;不能只靠用户的感受。 常用的评估网页应用性能的指标有 LCP, FID, CL…

TortoiseGit 入门指南13:拣选

对于多分支的代码库&#xff0c;将代码从一个分支转移到另一个分支是常见需求。 这时分两种情况。一种情况是&#xff0c;你需要另一个分支的所有代码变动&#xff0c;那么就采用 合并&#xff08;merge&#xff09;。另一种情况是&#xff0c;你只需要部分代码变动&#xff0…

目标检测算法:FPN思想解读

目标检测算法&#xff1a;FPN思想解读 说明 ​ FPN算法一种方法/思想&#xff0c;在许多的模型架构中都经常采用&#xff0c;也是提高模型精度的重要方法。 免责申明 ​ 有误写/错写/错误观点/错误解读&#xff0c;或者大家有其它见解&#xff0c;都可以在评论区指出&#xff0…

Linux中常用的指令

ls ls [选项] [目录或文件] 功能&#xff1a;对于目录&#xff0c;列出该目录下所有的子目录和文件&#xff1b;对于文件&#xff0c;列出该文件的文件名和其他属性 常用选项&#xff1a; -a:列出目录下的所有文件&#xff0c;包括以.开头的隐藏文件 -l:列出文件的详细信息。…

想要在独立站上赚钱,需要考虑哪些关键点?

我们都知道&#xff0c;没有什么工作是简单的&#xff0c;但是做得好的话&#xff0c;独立站确实是非常赚钱的。现在建立一个网站非常容易&#xff0c;你需要的花费也不高。 刚好后台也收到很多小伙伴问我独立站的盈利模式&#xff1f;怎么做才能赚钱&#xff1f;要在独立站上…

Django中使用反向关系名称(related_name)解决由“多对多”关系引起的字段名字冲突问题引起的迁移命令报错。

当在模型中为关系字段添加了related_name参数后&#xff0c;您可以使用该参数指定的名称来引用反向关系。下面是一个简单的例子来说明如何引用反向关系。 假设您有以下两个模型&#xff1a; from django.db import modelsclass Author(models.Model):name models.CharField(…

Ceph 服务的运用

目录 一、资源池 pool 管理 1.创建一个 Pool 资源池 2.查看集群 Pool 信息 3.查看资源池副本的数量 4.查看 PG 和 PGP 数量 5.修改 pg_num 和 pgp_num 的数量为 128 6.修改 Pool 副本数量为 2 7.修改默认副本数为 2 8.删除 Pool 资源池 8.1修改配置文件 8.2推送 ceph…

10.1寸三防加固平板电脑Windows工业平板

当前&#xff0c;移动计算设备的需求日益增长&#xff0c;特别是在现场工作和移动任务中的应用。为了满足这一需求&#xff0c;三防加固平板电脑SP-Q19采用了整机一体成型的设计&#xff0c;无合成拼接&#xff0c;使得长侧边的直线条与短侧边的圆弧形巧妙融合。同时&#xff0…

【wxWidgets】使用布局控件进行窗口布局

使用布局控件进行窗口布局 窗口布局基础 为了在各种环境中都能使窗口拥有合适的位置和大小&#xff0c;可能需要在OnSize事件中计算每一个窗口的大小并设置新位置&#xff0c;当然使用窗口布局控件可以更方便地实现 如果选择使用布局控件&#xff0c;可以通过自己编写或者使用…

创新创业项目申报管理系统vue+nodejs+mysql

开发语言 node.js 框架&#xff1a;Express 前端:Vue.js 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat 开发软件&#xff1a;VScode 本站是一个B/S模式系统&#xff0c;采用nodejs框架&#xff0c;MYSQL数据库设计开发&#xff0c;充分保证系统的稳定性。系统具有界…

详解UDP协议

在讲本篇文章之前&#xff0c;给读者介绍两个指令 1.netstat:用来查看网络状态的重要工具 语法&#xff1a;netstat [选项] n 拒绝显示别名&#xff0c;能显示数字的全部转化成数字l 仅列出有在 Listen (监听) 的服務状态p 显示建立相关链接的程序名t (tcp)仅显示tcp相关选项…

JDK、JRE、JVM之间的关系是什么?

目录 JVM、JRE、JDK的关系&#xff1f; JDK、JRE、JVM都是什么&#xff1f; JVM JRE JDK JVM、JRE、JDK的关系&#xff1f; 三者包含关系&#xff1a; JDK>JRE>JVM JDK、JRE、JVM都是什么&#xff1f; jdk&#xff1a;是用于java开发的最小环境 包括&#xff1a;ja…

C++牛客WebServer项目学习笔记一

1.Linux系统命令&#xff1a; sudo apt install softname # sudo 管理员权限&#xff1b;apt 安装软件命令&#xff1b;ps -ef | grep ssh # ps 查看进程命令&#xff1b;| 管道符&#xff1b;grep 过滤出&#xff08;过滤出ssh关键词&#xff09;&#xff1b; 3.Ctrl滚动鼠标…

抓 https 报文新方案 -Magisk+LSPosed,来试试吧

关于如何抓取Android端https报文&#xff0c;在之前一篇文章中有介绍可以通过VitualXposedJustTrustMe模块禁用SSL验证&#xff0c;这样可以抓取到https&#xff0c;还是有一些同学反馈以下的一些问题&#xff1a; App在低版本的Android上不兼容&#xff0c;需要用高版本的And…

leetcode:1470. 重新排列数组(python3解法)

难度&#xff1a;简单 给你一个数组 nums &#xff0c;数组中有 2n 个元素&#xff0c;按 [x1,x2,...,xn,y1,y2,...,yn] 的格式排列。 请你将数组按 [x1,y1,x2,y2,...,xn,yn] 格式重新排列&#xff0c;返回重排后的数组。 示例 1&#xff1a; 输入&#xff1a;nums [2,5,1,3,4…