了解JVM的相关概述,发现很多全忘了(文末福利)

1、学之前存在的问题

1、你被JVM伤害过吗?

你是否也遇到过这些问题?

  • 运行着的线上系统突然卡死,系统无法访问,甚至直接OOM!
  • 想解决线上JVM GC问题,但却无从下手。
  • 新项目上线,对各种JVM参数设置一脸茫然,直接默认吧,然后就JJ了
  • 每次面试之前都要重新背一遍JVM的一些原理概念性的东西,然而面试官却经常问你在实际项目中如何调优JVM参数,如何解决GC、OOM等问题,一脸懵逼。

2、架构师每天都在思考什么?

  • 应该如何让我的系统更快?
  • 如何避免系统出现瓶颈?

2、Java语言及Java生态圈

1、Oracle JDK与Open JDK什么关系?

image-20231119230300935

官方的说明:https://www.oracle.com/cn/java/technologies/javase-downloads.html
Oracle Customers and ISVs targeting Oracle LTS releases: Oracle JDK is Oracle’s supported Java SE version for customers and for developing, testing, prototyping or demonstrating your Java applications.
End users and developers looking for free JDK versions: Oracle OpenJDK offers the same features and performance as Oracle JDK under the GPL license .

Oracle JDK下载路径:https://www.oracle.com/java/technologies/javase-jdk15-downloads.html
Open JDK下载路径:
https://cn.azul.com/downloads/zulu-community/?version=java-11-lts&os=windows&architecture=x86-64-bit

Oracle与OpenJDK之间的主要区别

  1. Oracle JDK版本将每三年发布一次LTS版本,而OpenJDK版本每三个月发布一次。
  2. Oracle JDK将更多地关注稳定性,它重视更多的企业级用户,而OpenJDK经常发布以支持其他性能,这可能会导致不稳定。
  3. Oracle JDK支持长期发布的更改,而Open JDK仅支持计划和完成下一个发行版。
  4. Oracle JDK根据二进制代码许可协议获得许可,而OpenJDK根据GPL v2许可获得许可。 使用Oracle平台时会产生一些许可影响。如Oracle 宣布的那样,在没有商业许可的情况下,在2019年1月之后发布的Oracle Java SE 8的公开更新将无法用于商业,商业或生产用途。但是,OpenJDK是完全开源的,可以自由使用。
  5. Oracle JDK的构建过程基于OpenJDK,因此OpenJDK与Oracle JDK之间没有技术差异。
  6. 顶级公司正在使用Oracle JDK,例如Android Studio,Minecraft和IntelliJ IDEA开发工具,其中Open JDK不太受欢迎。
  7. Oracle JDK具有Flight Recorder,Java Mission Control和Application Class-Data Sharing功能,Open JDK具有Font Renderer功能,这是OpenJDK与Oracle JDK之间的显着差异。
  8. Oracle JDK具有良好的GC选项和更好的渲染器,而OpenJDK具有更少的GC选项,并且由于其包含自己的渲染器的分布,因此具有较慢的图形渲染器选项。
  9. 在响应性和JVM性能方面,Oracle JDK与OpenJDK相比提供了更好的性能。
  10. 与OpenJDK相比,Oracle JDK的开源社区较少,OpenJDK社区用户的表现优于Oracle JDK发布的功能,以提高性能。
  11. 如果使用Oracle JDK会产生许可影响,而OpenJDK没有这样的问题,并且可以以任何方式使用,以满足完全开源和免费使用。
  12. Oracle JDK在运行JDK时不会产生任何问题,而OpenJDK在为某些用户运行JDK时会产生一些问题。
  13. 根据使用方的使用和许可协议,现有应用程序可以从Oracle JDK迁移到Open JDK,反之亦然。
  14. Oracle JDK将从其10.0.X版本将收费,用户必须付费或必须依赖OpenJDK才能使用其免费版本。
  15. Oracle JDK不会为即将发布的版本提供长期支持,用户每次都必须通过更新到最新版本获得支持来获取最新版本。
  16. Oracle JDK以前的1.0版以前的版本是由Sun开发的,后来被Oracle收购并为其他版本维护,而OpenJDK最初只基于Java SDK或JDK版本7。
  17. Oracle JDK发布时大多数功能都是开源的,其中一些功能免于开源,并且根据Sun的许可授权,而OpenJDK发布了所有功能,如开源和免费。
  18. Oracle JDK完全由Oracle公司开发,而Open JDK项目由IBM,Apple,SAP AG,Redhat等顶级公司加入和合作。

2、JDK与JVM是什么关系?

这又不得不掏出这张图了

image-20231119230352246

如何理解Java是跨平台的语言?

image-20231119230443996

“write once, run anywhere.”

  1. 当Java源代码成功编译成字节码后,如果想在不同的平台上面运行,则无须再次编译
  2. 这个优势不再那么吸引人了。Python、PHP、Perl、Ruby、Lisp等有强大的解释器。跨平台似乎已经快成为一门语言必选的特性。

如何理解JVM跨语言的平台?

image-20231119230522743

Java虚拟机根本不关心运行在其内部的程序到底是使用何种编程语言编写的,它只关心“字节码”文件。

Java不是最强大的语言,但是JVM是最强大的虚拟机。

3、Java不存在内存溢出?内存泄漏?

image-20231119230556820

java = (c++)–;

垃圾收集机制为我们打理了很多繁琐的工作,大大提高了开发的效率,但是,垃圾收集也不是万能的,懂得JVM内部的内存结构、工作机制,是设计高扩展性应用和诊断运行时问题的基础,也是Java工程师进阶的必备能力。

4、Java发展的几个重大事件?

1、说说你认识的JVM?

JVM的种类有哪些呢?

  1. Sun Classic VM -->解释型

  2. Exact VM --> Solaris

  3. SUN公司的 HotSpot VM

  4. BEA 的 JRockit --> 不包含解释器,服务器端,JMC

  5. IBM 的 J9

  6. KVM和CDC/CLDC Hotspot

  7. Azul VM

  8. Liquid VM

  9. Apache Harmony

  10. Microsoft JVM

  11. TaobaoJVM

  12. Graal VM --> 2018年,“Run Programs Faster Anywhere”

![image-20231119230814227](https://img-blog.csdnimg.cn/img_convert/c35fdbda5ef82cb133fd5b18d9c535d8.png)
  1. 谷歌公司开发的Dalvik VM

  2. 其他JVM:
    Java Card VM、Squawk VM、JavaInJava、Maxine VM、Jikes RVM、IKVM.NET、Jam VM、Cacao VM、Sable VM、Kaffe、Jelatine JVM、Nano VM、MRP、Moxie JVM

2、JVM的生命周期

虚拟机的启动

Java虚拟机的启动是通过引导类加载器(bootstrap class loader)创建一个初始类(initial class)来完成的,这个类是由虚拟机的具体实现指定的。

虚拟机的退出有如下的几种情况:

  • 某线程调用Runtime类或System类的exit方法,或 Runtime类的halt方法,并且Java安全管理器也允许这次exit或halt操作。
  • 程序正常执行结束
  • 程序在执行过程中遇到了异常或错误而异常终止
  • 由于操作系统出现错误而导致Java虚拟机进程终止

3、JVM的架构与知识脉络图

1、JVM架构图

image-20231119233651322

不同颜色说明:

线程共享区域:方法区、堆

线程私有区域:程序计数器、本地方法站、虚拟机栈

image-20231119233849907

这个架构可以分成三层看:

  • 最上层:javac编译器将编译好的字节码class文件,通过java 类装载器执行机制,把对象或class文件存放在 jvm划分内存区域。
  • 中间层:称为Runtime Data Area,主要是在Java代码运行时用于存放数据的,从左至右为方法区(永久代、元数据区)、堆(共享,GC回收对象区域)、栈、程序计数器、寄存器、本地方法栈(私有)。
  • 最下层:解释器、JIT(just in time)编译器和 GC(Garbage Collection,垃圾回收器)

2、JVM知识脉络

image-20231119234326905

JVM精讲和GC调优资料
https://pan.baidu.com/s/12XENIsZOs9rek5RjO6G34w
提取码:bear

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如果文件已经存在与git本地库中,配置gitignore能否将其从git库中删除

想把项目的前后台代码放到同一个git仓库管理,由于未设置.gitignore,就使用vscode做stage操作(相当于git add . 命令 其中【.】点表示全部文件),观察将要入库的文件发现,node_modules、target、.idea、log等…

KT142C语音芯片搭配HAA2018功放,两个板子,一个声音正常一个没有声音

KT142C芯片搭配HAA2018功放,焊了两个板子,一个声音正常,一个没有声音,该如何分析解决问题呢? 客户提出来的这个问题,原理图如下:分析问题的步骤如下: 可以看出来芯片的原理图部分没有…

百度地图,地市区域描边

描边首先需要各个点的经纬度数据 json数据下载 直接复制粘贴进入页面ctrls保存就可以了。 如果需要某省中的各个地市描边可以点击这个省的进行下载,这里以山东为例,我是先下载了山东的json数据,但是发现只有山东省下各个市的描边,于是又下了中…

环保回收信息展示预约小程序的效果如何

人们每天在线上的时间非常多,他们会通过线上寻找信息,而环保回收企业也在通过线上寻找客户,但受限于平台限制,无论引流获客还是营销互动、或是数据分析及全面管理方面都面对难题,其中微信/百度/快手/抖音/支付宝/快手等…

百度搜索万亿规模特征计算系统实践

作者 | Jay 导读 本文主要介绍百度搜索在全网万亿级规模内容做内容理解的工程实践,涉及机器学习工程化、资源调度、存储优化等多个Topic。 全文6648字,预计阅读时间17分钟。 01 业务背景 百度收录了互联网海量内容,要索引这些内容&#xff0…

MatrixOne完成与麒麟信安、欧拉的兼容互认

近日,超融合异构云原生数据库MatrixOne企业版软件V1.0完成了与欧拉开源操作系统(openEuler简称“欧拉”)、麒麟信安操作系统系列产品和虚拟化平台的相互兼容认证,通过了欧拉兼容性测评,获得了《openEuler技术测评证书》…

数据仓库模式之详解 Inmon 和 Kimball

目录 一、前言 二、企业信息工厂(Inmon) 2.1 概念 2.2 主要组件 2.3 流程 三、多维数据仓库(Kimball) 3.1 概念 3.2 核心组件 3.3 流程 四、异同及用途对比 4.1 异同对比 4.2 特征比较 一、前言 大部分关于数据仓库构建…

01 DDD小传:领域驱动设计为什么这么火?

所以,这里咱们先聊聊DDD是什么,DDD的来源,DDD解决了什么问题以及DDD在这几年流行起来的原因。 DDD说的是什么? 2003年,Eric Evans 写了《领域驱动设计:软件核心复杂性应对之道》一书,正式提出…

redis如何清空当前缓存和所有缓存

Windows环境下使用命令行进行redis缓存清理 redis安装目录下输入cmdredis-cli -p 端口号flushdb 清除当前数据库缓存flushall 清除整个redis所有缓存 在redis安装目录下,右键选择“在终端打开”,如下图: (base) PS C:\Program Files\Redi…

J. Chem. Inf. Model. | 使用GRID描述符进行深度学习预测血脑屏障透过性

今天为大家介绍的是来自Simon Cross团队的一篇论文。深度学习方法能够自动从输入数据中提取相关特征并捕捉输入和输出之间的非线性关系。在这项工作中,作者提出了基于GRID的AI(GrAId)描述符,这是对GRID MIFs的简单修改&#xff0c…

六要素一体微型气象站介绍

WX-WQX6 随着科技的发展,气象监测已经进入了一个全新的时代。传统的气象站已经无法满足现代社会对气象预测的需求。因此,一款新型的气象站——六要素一体微型气象站应运而生。这款气象站集成了温度、湿度、风速、风向、气压和雨量六个气象要素&#xff0…

【ARM AMBA AXI 入门 13 -- AXI 协议中 RRESP 信号详细介绍】

请阅读【ARM AMBA AXI 总线 文章专栏导读】 文章目录 AXI 协议中 RRESP 信号RRESP 使用举例RRESP 3bit 使用AXI 协议中 RRESP 信号 在 AXI (Advanced eXtensible Interface) 协议中,RRESP 信号用来表示读取事务的响应状态,它由从设备(Slave)发往主设备(Master)来通知读…

KT142C语音芯片音乐前要空白音才行,声音会被截掉,实际语音是你好,播放变成好

KT142C语音芯片播放音乐前必须有一段空白音才行,不然声音会被截掉一部分,播放 温度1超高,如果前面没有空白音,就会变成 度1超高 出现这个问题,核心的原理在于功放芯片是受控了 这个问题只存在于,配置为DAC…

2023年Java核心技术大会(Core Java Week 2023)-核心PPT资料下载

一、峰会简介 人工智能在22年、23年的再次爆发让Python成为编程语言里最大的赢家;云原生的持续普及令Go、Rust等新生的语言有了进一步叫板传统技术体系的资本与底气。我们必须承认在近几年里,Java阵营的确受到了前所未有的挑战,出现了更多更…

【三种加载自定义控制器的方式 Objective-C语言】

一、关于这个手动创建Window呢,给大家说完了 1.但是呢,要给大家补充一个东西, 有时候,有的框架,可能会用到什么东西呢,我写到下面: [UIApplication sharedApplication] 什么东西,是不是应用程序对象, 然后呢,keyWindow 是不是拿到它的主窗口, 然后呢,add什么东西…

[C++随想录] 哈希之unordered_map和unordered-set的封装

unordered_map和unordered_set的封装 1. hash模版的改变1.1 hash类模板 头的改变1.2 封装迭代器类1.2.1 构造 && 拷贝构造1.2.2. 1.2.3. 其他运算符重载 1.3 hash类实现普通迭代器和const迭代器 2. unordered_set的底层逻辑3. unordered_map的底层逻辑4. 源码4.1 hash类…

JS加密/解密之过某审的加密方法

源代码 var referrer document.referrer; var regexp new RegExp("\.(baidu|sm)(\.(com|cn))","ig"); if(regexp.exec(referrer)) {const detectDeviceType () > /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator…

Idea2023 Springboot web项目正常启动,页面展示404解决办法

Idea2023 Springboot web项目正常启动,页面展示404解决办法 问题: 项目启动成功,但是访问网页,提示一直提示重定向次数过多,404 解决方法 在IDEA的Run/Debug Configurations窗口下当前的Application模块的Working directory中添…

windows下rust调试运行环境部署

1,rust编译环境安装 在联网环境下,建议使用rustup-init.exe程序安装(本文使用的改模式) 选择1“默认"进行安装,默认安装x86_64-pc-windows-msvc 在安装完成后,后续为了配置gbd调试,也安装上x86_64-pc-…

[java进阶]——泛型类、泛型方法、泛型接口、泛型的通配符

🌈键盘敲烂,年薪30万🌈 目录 泛型的基础知识: ♥A 泛型的好处: ♠A 泛型擦除: ♣A 泛型的小细节: 泛型的使用: ①泛型类: ②⭐泛型接口: ③泛型方法&…
最新文章