1. 初步认识 Java 虚拟机

一、前言

其实一直都想系统性的学习一下 JVM,尝试过很多次,最终没能坚持下来,现在已经工作多年,发现对于 JVM这块知识还是很薄弱,不利于职业长远发展,并且之前掌握的都是一些零散的知识,没能形成体系,趁着这段时间不是很忙,打算集中精力,花一个月的时间仔细学习一下,借助于《深入理解 Java 虚拟机》第三版,帮助我梳理知识脉络,参考尚硅谷宋红康的视频,尽量降低学习成本,基于 JDK8HotSpot学习,通过写博客的形式记录学习进度,监督自己。

二、Java 及 JVM 简介

Java 是一门高级语言,操作系统是无法直接运行或者说识别高级语言的程序代码的,简单来说操作系统只能识别二进制的机器指令(01串),那么我们就需要将语义化的程序片段转变成系统可识别的指令,这一步有点类似与翻译,而 JVM 其中的一个主要作用就是翻译,但是不仅仅是翻译,更是提供了一套特定的运行环境,脱离了宿主平台的操作系统限制,直接运行在 JVM 之中。只要你具备 JVM 环境,就可以运行 Java 程序,从而实现了跨平台。但是想要调用系统层面的资源,永远也绕不开机器指令的操作,最终还是需要 JVM 通过一些手段去操作底层系统,这就导致了多走了一段“弯路”,这也是一直被诟病的说 Java 效率低的主要原因。

JVM这种模式,给其它语言提供了思路,以至于现在不仅仅是Java,只要你的语言能编译成我JVM平台能够识别的字节码文件,都可以在 JVM 上跑起来。例如: KotlinGroovyScala等。当然你也可以根据规范写一个自己的虚拟机,附上参考文档:https://docs.oracle.com/javase/specs/index.html

当然Java除了跨平台的特性外,另一大优点就是垃圾回收机制,简单说在程序的生命周期中,对于对象我们只管在用的时候创建,不需要过多关注在什么时候回收,这给开发带来了极大的便利性。当然,这无疑也是一把双刃剑,对内存资源不敏感的开发者,很容易无意间写出一些存在内存风险的代码,内存泄漏内存溢出

可以在这里看到市场的使用情况:https://www.tiobe.com/tiobe-index/

目前 Java 主要运用于服务端项目开发,社区活跃,开源项目众多,也是目前生态最完善的语言之一。

三、Java 发展历程

1990 年诞生,1995年 Sun 正式发布 Java 和 HotSport。一直迭代维护,到 2004 年,将命名方式改为大版本,从 JDK1.5 改为 JDK5.0,之后开启新纪元,2006 年发布 JDK6,并且开源建立 OpenJDK。这个时候其实 JVM 的优势开始被 Sun 盯上了,2008 年,Oracle 收购了 BEA,得到了 JRockit 虚拟机。随着慢慢发展,有一些其它语言也加入到Java虚拟机平台来,直到 2010 年,Oracle 收购了 Sun,获得了 Java 商标和 HotSpot 虚拟机,这个时候它就掌握了市面上占用率最高的两款虚拟机 JRockit 和 HotSpot,并且计划合二为一,创造 HotRockit,当然难度很大,应该是整合了部分,但是名称还是叫 HotSpot。2011 年 JDK7, 启用G1垃圾回收器。2017 年,JDK9 发布,G1 成为默认GC,替代 CMS,同时 IBM 开源 J9。后面JDK更新越来越频繁,逐渐开器商业化模式,2018年,Oracle 宣布 JavaEE 成为历史名词,并且将 JDBC,JMS,Servlet 赠予 Eclipse 基金会,同年发布另一个 LTS 版本 JDK11,并且发布革命性 ZGC,调整 JDK 的授权许可,分为 OpenJDkOracleJDK 两个版本维护。2019 年 JDK12 发布,加入由 RedHat 领导开发的 Shenandoah GC。截至目前最新已经发展到 JDK23 了,但是市面上大多数依然还是 JDK8 的版本,所以我们从 JDK8 开始学习还是比较科学的。

四、JDK 和 JRE 的关系

五、JVM 架构

以下为 JVM 架构的模型图,不用刻意死记硬背,一定要理解,我之前每次面试前都会背,造成后果就是,我以为我知道了,但是其实啥也不是,欺骗自己而以,随便细问就露馅。

简图

详细图

六、总结

先对于 Java 和 JVM 有一个初步的认识,对于 Java 跨平台的原理有一个大致了解,并且认识到 JVM 的重大作用,JVM 是比 Java 语言更加伟大的发明。

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

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

相关文章

数据结构之二叉树的链式结构——递归的暴力美学

1. 实现链式的二叉树结构 我们之前用顺序表里面数组的底层结构实现了二叉树中堆的结构,但是不是所有的二叉树都具有着堆的性质,所以我们现在需要一个链式结构来描述普遍的二叉树。其底层结构类似一个链表,但是每一个结点由单个区域&#xff…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-31

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-31 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-31目录1. Large Language Models for Manufacturing摘要创新点算法模型实验效果(包含重要数据与结论)推荐…

利用SpringBoot构建城镇住房保障平台

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理城镇保障性住房管理系统的相关信息成为必然…

【笔记】扩散模型(九):Imagen 理论与实现

论文链接:Photorealistic Text-to-Image Diffusion Models with Deep Language Understanding 非官方实现:lucidrains/imagen-pytorch Imagen 是 Google Research 的文生图工作,这个工作并没有沿用 Stable Diffusion 的架构,而是级…

Windows下载安装Ollama本地运行大模型,新手详细

目录 1. 下载安装Ollama2. 环境配置- 关闭开机自启动(可选):- 配置环境变量(必须):- 配置端口(可选):- 允许浏览器跨域请求(可选): 3.…

代码随想录算法训练营Day55 | 图论理论基础、深度优先搜索理论基础、卡玛网 98.所有可达路径、797. 所有可能的路径、广度优先搜索理论基础

目录 图论理论基础 深度优先搜索理论基础 卡玛网 98.所有可达路径 广度优先搜索理论基础 图论理论基础 图论理论基础 | 代码随想录 图的基本概念 图的种类 大体分为有向图和无向图。 图中的边有方向的是有向图: 图中的边没有方向的是无向图: 图…

牛客练习赛131(dp,dfs,bfs,线段树维护等差数列)

文章目录 牛客练习赛131(dp,dfs,bfs,线段树维护等差数列)A. 小H学语文B. 小H学数学(dp、偏移值)C. 小H学生物(DFS、树上两点间路径的距离)D. 小H学历史(BFS)E. 小H学物理…

干货分享篇:Air780EP的硬件设计原理全解析(上)

一、绪论 Air780EP是一款基于移芯EC718P平台设计的LTE Cat 1无线通信模组。支持FDD-LTE/TDD-LTE的4G远距离无线传输技术。另外,模组提供了USB/UART/I2C等通用接口满足IoT行业的各种应用诉求。 二、综述 2.1 型号信息 表格 1:模块型号列表 2.2 主要性能…

Python将Word文档转为PDF

将word转pdf,只能使用办公工具,但是这些工具大都是收费。因此想用python 将word转pdf,发现很好用特此记录下。方法一:使用docx2pdf模块将docx文件转为pdf 要实现这样的功能,需要用到的就是 docx2pdf 这个python第三方库。对于doc…

无惧任天堂的法律威胁:Switch模拟器Ryujinx v1.2.72版发布

此前任天堂向多个提供 Nintendo Switch 模拟器项目发送律师函甚至直接起诉,要求这些项目立即停止更新、删除以及向任天堂提供经济赔偿。其中 Ryujinx 项目已经在 2024 年 10 月 1 日因任天堂的法律威胁而放弃项目,不过很快就有分叉版本出现,这…

JavaWeb——Web入门(6/9)-HTTP协议:协议解析(客户端的 HTTP 协议解析、服务端的 HTTP 协议解析、Web服务器的作用)

目录 概述 客户端的 HTTP 协议解析 服务端的 HTTP 协议解析 Web服务器的作用 概述 了解完 HTTP 协议的请求数据格式以及响应数据格式之后,接下来我们来讲了解 HTTP 协议的解析。 HTTP 协议的解析分为客户端和服务端两个部分,客户端浏览器中内置了解…

操作系统-实验报告单(2)

目录 1 实验目标 2 实验工具 3 实验内容、实验步骤及实验结果 一、自定义操作系统并启动 1. 最简单操作系统的编写并生成镜像文件 2.虚拟机启动操作系统 【思考题:1、仔细阅读helloos.nas,结合操作系统启动过程尝试分析它的作用;2、若…

城镇住房保障:SpringBoot系统优化技巧

3系统分析 3.1可行性分析 通过对本城镇保障性住房管理系统实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本城镇保障性住房管理系统采用SSM框架,JA…

FlyMcu串口下载STLink Utility

1、FlyMcu FlyMcu串口下载,同STC-ISP(51单片机下载)。 使用步骤: 1、STM32的USART1通过串口转usb连接到电脑 2、通过keil生成Hex、bin文件 生成bin、hex文件可参考 keil生成bin文件(简单)-CSDN博客 创建…

aws(学习笔记第十课) 对AWS的EBS如何备份(snapshot)以及使用snapshot恢复数据,AWS实例存储

aws(学习笔记第十课) 对AWS的EBS如何备份(snapshot)以及使用snapshot,AWS实例存储 学习内容: 对AWS的EBS如何备份AWS实例存储EBS和实例存储的不足 1. 对AWS的EBS如何备份(snapshot)以及使用snapshot恢复数…

论文2—《基于柔顺控制的智能神经导航手术机器人系统设计》文献阅读分析报告

论文报告:基于卷积神经网络的手术机器人控制系统设计 摘要 本研究针对机器人辅助微创手术中定向障碍和缺乏导航信息的问题,设计了一种智能控制导航手术机器人系统。该系统采用可靠和安全的定位技术、7自由度机械臂以及避免关节角度限制的逆运动学控制策…

《数据结构与算法》二叉树基础OJ练习

二叉树的基础知识详见:《数据结构与算法》二叉树-CSDN博客 1 单值二叉树 思路 我们把树分成当前树(用根和左孩子还有右孩子进行比较,如果左孩子或者右孩子为空那就不比了,如果左右孩子或者其中一个存在就比较,相等就是…

栈和队列(C 语言)

目录 一、栈1. 栈的概念2. 栈的结构3. 栈的实现思路4. 栈的实现代码 二、队列1. 队列的概念2. 队列的结构3. 队列的实现思路4. 队列的实现代码5. 循环队列 一、栈 1. 栈的概念 栈是一种特殊的线性表,只允许在固定的一端进行插入和删除操作,该端被称为栈…

自动化测试工具Ranorex Studio(二十五)-库的拆分

默认地,每一个Ranorex Studio项目包含一个对象库文件,这个文件自动用在每一个新创建的录制中。你可以在一个单独的库文件中管理一个测试套件项目中所有的UI元素,但是在一个自动化测试项目中多个对象库的存在还是有一些原因的: .测…

Centos下安装Maven(无坑版)

Linux 安装 Maven Maven 压缩包下载与解压 华为云下载源,自行选择版本 下面的示例使用的是 3.8.1 版本 wget https://repo.huaweicloud.com/apache/maven/maven-3/3.8.1/binaries/apache-maven-3.8.1-bin.tar.gz解压 tar -zxvf apache-maven-3.8.1-bin.tar.gz移…