当前位置: 首页 > news >正文

【面试】介绍一下HotSpot虚拟机

目录

          • 1. 说明
          • 2. 起源与发展
          • 3. 技术特点
            • 3.1 热点代码探测技术
            • 3.2 内存管理
            • 3.3 垃圾收集器
            • 3.4 并发和多线程支持
            • 3.5 指令重排优化
          • 4. 执行模式与性能

1. 说明
  • 1.HotSpot虚拟机是一款由Oracle JDK和OpenJDK广泛使用的Java虚拟机(JVM)。
  • 2.HotSpot虚拟机凭借其高效的热点代码探测技术、灵活的内存管理、多样化的垃圾收集器以及强大的并发与多线程支持等特点,成为了Java领域广泛使用的虚拟机之一。
2. 起源与发展
  • 1.HotSpot虚拟机最初并非由Sun公司开发,是由一家名为Longview Technologies的小公司设计。
  • 2.该虚拟机来源于Strongtalk虚拟机,而Strongtalk虚拟机中的技术又来源于为支持Self语言设计的Self虚拟机。
  • 3.从SUN的JDK版本1.3.1开始,HotSpot虚拟机被引入并作为默认的JVM使用。
  • 4.HotSpot虚拟机在2006年底开源,主要使用C++实现,JNI接口部分用C实现。
3. 技术特点
3.1 热点代码探测技术
  • 1.HotSpot虚拟机通过执行计数器找出最具有编译价值的代码(热点代码),然后通过即时编译器以方法为单位进行编译,从而提高Java运行的性能。
3.2 内存管理
  • 1.HotSpot虚拟机采用对象堆内存布局,包括对象头、实例数据和对齐填充。
  • 2.对象头包含Mark Word(用于存储对象的哈希码信息、GC信息等)和类型指针(指向对象类型元数据的指针)。
3.3 垃圾收集器
  • 1.HotSpot虚拟机提供了多种垃圾收集器,如Serial收集器、ParNew收集器、Parallel Scavenge收集器等,以适应不同的应用场景和性能需求。
3.4 并发和多线程支持
  • 1.HotSpot虚拟机支持多线程并发执行,通过CAS重试保证内存分配操作的原子性。
  • 2.在堆中为每个线程分配一小块内存(TLAB),以减少并发问题并提高性能。
3.5 指令重排优化
  • 1.CPU会充分利用多核能力,将没有依赖关系的代码乱序执行,以提高执行效率。
  • 2.HotSpot虚拟机通过volatile关键字等机制来禁用指令重排,保证多线程环境下的数据一致性。
4. 执行模式与性能
  • 1.HotSpot虚拟机采用即时编译(JIT)技术,将常用的部分代码编译为本地(原生)代码,从而提高Java程序的执行性能。
  • 2.HotSpot虚拟机占据绝对的市场地位,从jdk1.3到现如今jdk14都是Oracle JDK和OpenJDK中默认的虚拟机。

相关文章:

  • Jenkins常用插件与应用详解
  • Python中Web开发-Django框架
  • uni-app实现页面通信EventChannel
  • php反序列化学习(2)
  • 代码随想录算法训练营第三十四 |● 1005.K次取反后最大化的数组和 ● 134. 加油站 ● 135. 分发糖果
  • 前端开发:$nextTick()的使用及原理
  • Leetcode 105:从前序与中序遍历序列构造二叉树
  • 大数据中的电商数仓项目:探秘业务的核心
  • 【C++】——string模拟实现
  • GB-T 43206-2023 信息安全技术 信息系统密码应用测评要求
  • Vim安装与配置教程(解决软件包Vim没有安装可候选)
  • Mac安装第三方软件的命令安装方式
  • Django Celery技术详解
  • 【手撕面试题】Vue(高频知识点一)
  • Java八股文:程序员的“面试经”还是技术壁垒?
  • Apache Zeppelin在Apache Trafodion上的可视化
  • express如何解决request entity too large问题
  • git 常用命令
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • IndexedDB
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • magento2项目上线注意事项
  • Mithril.js 入门介绍
  • Nacos系列:Nacos的Java SDK使用
  • STAR法则
  • vue脚手架vue-cli
  • 从0到1:PostCSS 插件开发最佳实践
  • 回顾 Swift 多平台移植进度 #2
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 首页查询功能的一次实现过程
  • 通过git安装npm私有模块
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 小而合理的前端理论:rscss和rsjs
  • 译自由幺半群
  • 用Python写一份独特的元宵节祝福
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • ​ssh免密码登录设置及问题总结
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • ​香农与信息论三大定律
  • # 达梦数据库知识点
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #微信小程序(布局、渲染层基础知识)
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (Matlab)使用竞争神经网络实现数据聚类
  • (待修改)PyG安装步骤
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (学习总结)STM32CubeMX HAL库 学习笔记撰写心得
  • (原)本想说脏话,奈何已放下
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (转)关于多人操作数据的处理策略
  • (转)视频码率,帧率和分辨率的联系与区别
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • (转载)PyTorch代码规范最佳实践和样式指南