【Java】深入理解Java虚拟机P1-3(JVM性能调优+内存模型+虚拟机原理)

程序员通勤双肩包,下单送全年 CSDN 会员 防泼水面料电脑包,保护笔记本电脑,背负轻便,下单再赠 Coding Plan,看技术干货、查文档、下载源码,一站式搞定学习需求 阅读详情

JDK JRE JVM的区别和联系

JDK:Java Development Kit,Java 开发工具包
JRE:Java Runtime Environment,Java 运行时环境
JVM:Java Virtual Machine, Java 虚拟机,它只认识 xxx.class 这种类型的文件,它能够将 class 文件中的字节码指令进行识别并调用操作系统向上的 API 完成动作。jvm 是 Java 能够跨平台的核心。
这三者的关系是:一层层的嵌套关系。JDK>JRE>JVM。
在这里插入图片描述图片源

Java 为什么能跨平台,实现一次编写,多处运行?

  • Java 能够跨平台运行的核心在于 JVM 。不是 Java 能够跨平台,而是它的 jvm 能够跨平台。我们知道,不同的操作系统向上的 API 肯定是不同的,那么如果我们想要写一段代码调用系统的声音设备,就需要针对不同系统的 API 写出不同的代码来完成动作。
  • 而 Java 引入了字节码的概念,jvm 只能认识字节码,并将它们解释到系统的 API 调用。针对不同的系统有不同的 jvm 实现,有 Linux 版本的 jvm 实现,也有 Windows 版本的 jvm 实现,但是同一段代码在编译后的字节码是一样的。引用上面的例子,在 Java API 层面,我们调用系统声音设备的代码是唯一的,和系统无关,编译生成的字节码也是唯一的。但是同一段字节码,在不同的 jvm 实现上会映射到不同系统的 API 调用,从而实现代码的不加修改即可跨平台运行。

为什么我们的电脑在装完 jdk 后会有两个版本的 jre?这两个不同版本的 jre 相互之间有什么联系吗?

没有联系。甚至准确的来说,它俩是一样的,无论是用哪一个都是可以的。只是很多人习惯将会单独安装另一个 jre,虽然单独安装的 jre 也并没有被使用,原因可能就是刚开始大家都不清楚 jdk 和 jre 之间的关系,所以就默认的都安装上了。

在 jdk 的 bin 目录下,基本上都是一些可执行文件,并且它们还不大。其实这些可执行文件只是外层的一层封装而已,这样的目的是避免输入的命令过长。例如 javac.exe 内部调用的其实是 JDK 中 lib 目录中的 tools.jar 中 com.sun.tools.javac.Main 类,也就是说这些工具只是入口而已。而实际上它们本身又都是由 Java 编写的,所以在 jdk 目录下的 jre 既提供了这些工具的运行时环境,也提供了我们编写完成的 Java 程序的运行时环境。

所以,很明显,jdk 是我们的开发工具包,它集成了 jre ,因此我们在安装 jdk 的时候可以选择不再安装 jre 而直接使用 jdk 中的 jre 运行我们的 Java 程序。(但是大部分人都默认将两个都装上了)。但是如果你的电脑不是用来开发 Java 程序的,而仅仅是用来部署和运行 Java 程序的,那么完全可以不用安装 jdk,只需要安装 jre 即可。

JVM初体验:内存溢出场景模拟

阿里P8写出的2020最新版《深入理解Java虚拟机3》轻松学会JVM底层 前言 Java是目前用户最多、使用范围最广的软件开发技术,Java的技术体系主要由支撑Java程序运行的虚拟机、提供各开发领域接口支持的Java类库、Java编程语言及许许多多的第三E方Java框架(如Spring、 MyBatis等) 构成。在国内,有关Java类库API、Java语言语法及第三方框架的技术资料和书籍非常丰富,相比而言,有关Java虚拟机的资料却显得异常贫乏。 随着Java技术的不断发展,它已被应用于越来越多的领域之中。其中一些领域,如互联网、能源、金融、通信等,对程序的性能、稳定性和扩. 阅读详情

相关推荐

(附深入理解Java虚拟机pdf)阿里P9级架构师花猿灯塔四小时让你搞懂JVM底层原理

JVM面试难题 当面试官向你提问JVM的实战问题时,你是否感觉到无所适从? 想解决生产环境中的GC问题,你是否感觉到狗咬刺猬,无处下嘴? 面对JVM的海量参数,你是否感觉到迷茫无助? 看过很多的JVM文章,但当遇到了生产环境中真实问题的时候,你是否依然不知道如何进行分析排查? 那么,作为JAVA工程师,你曾经面对过JVM这只怪兽吗?你有没有被JVM伤害过? 从招聘需求上看,JVM还是很重要滴 如果面对JVM实战无从下手,那么你缺乏这两个字 那就是实战 消除痛点 解决面试 积.

yuandengta的博客 864

JDK、JRE和JVM三者的区别和联系

(一)JDKJDK,全称Java Development Kit,是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的Java应用程序。JDK是整个Java开发的核心。(二)JREJRE,全称Java Runtime Environment,是指Java的运行环境,是可以在其上运行、测试和传输应用程序的Java平台。(三)JVM

郝南过的博客 1891

jdk,jre,jvm三者的联系和区别

文章目录一、什么是JDK?二、什么是JRE?三、什么是JVM?总结 一、什么是JDK? JDK(java develpment kit) Java开发工具包 提供给开发人员来使用的开发Java程序,包含了Java开发常用的一些工具类、依赖包和类库,也包括了JRE。所以安装了JDK,就不用再单独安装JRE了。 二、什么是JRE? JRE (Java runtime environment ) Java 运行时环境。 JRE是一个软件包,它捆绑了libraries(jar)JVM,以及用Java编写的应用程

qq_47125845的博客 465

jdk jre jvm 的比较,为什么能够一次编译多处运行

JVM :英文名称(Java Virtual Machine),就是我们耳熟能详的 Java 虚拟机。它只认识 xxx.class 这种类型的文件,它能够将 class 文件中的字节码指令进行识别并用操作系统向上的 API 完成动作。所以说,jvmJava 能够跨平台的核心,具体的下文会详细说明。 JRE :英文名称(Java Runtime Environment),我们叫它:Java 运行时环境。它主要包含两个部分,jvm 的标准实现和 Java 的一些基本类库。它相对于 jvm 来说,多出来的

HTML菜鸟学习笔记 476

Java 中的 JDK,JRE 和 JVM 有什么区别和联系?

点击上方关注 “终端研发部”设为“星标”,和你一起掌握更多数据库知识首先说说JDKJDK(Java Development Kit)Java 语言的软件开发工具包(SDK)。在JD...

这个时代,作为程序员可能要学习小程序 4982

JDK、JRE、JVM的区别与联系

jvm是jre的一部分,jvm是虚拟出的一台计算机,这台计算机不关心java源代码如何写的,它只关心java源程序编译出的字节码文件,jvmjava程序能实现跨平台的核心,它不关心真实计算机,也不关心操作系统等等,就像一个中间平台,只负责将字节码文件转换成当前计算机能理解的CPU指令集或系统用。 > jvm有自己完善的硬件架构,如处理器、栈区、寄存器等。

zxc的博客 8256

深入理解JVM虚拟机:从原理到实践

Java虚拟机JVM)是运行Java字节码的虚拟计算机,它是Java语言跨平台特性的核心。JVM就像一个抽象的计算机,有自己的指令集和运行时内存区域,能够执行字节码文件(.class文件)。实现Java的跨平台特性(“一次编写,到处运行”)管理Java程序的内存执行垃圾回收提供字节码到机器码的转换确保程序的安全运行自定义类加载器通常需要继承类,并重写方法。示例:自定义类加载器// 类文件的存放路径@Overridetry {// 将类名转换为文件路径。

qq_44266569的博客 773

JVM底层设计原理项目实战教程,阿里P8架构师推崇的这份JVM笔记,到底牛在哪了?

前言 JVM ,即“Java 虚拟机”,有点类似于“操作系统”,上面跑着Java程序。 其实我们在平常的工作中,并不会直接接触到JVM,但是经常会遇到与之相关的问题: 一段代码有问题,执行效率低,但就是无法找到深层次原因。 线上系统CPU疯狂运转, GC时间飙升,产生卡顿,严重影响服务响应时间; 正在运行的Java程序,突然就OOM(内存溢出)了; 要做性能化时面对一堆JVM的参数无从下手… 这些问题其实都和JVM有关系。 我还记得曾经有一次花了整整一周时间,才定位到一个棘手的堆外内存

欢迎您访问我的公众号【前程有光】 5779

[JVM教程与] 为什么要学习JVM虚拟机?,阿里一面面试官

在面试前我整理归纳了一些面试学习资料,文中结合我的朋友同学面试美团滴滴这类大厂的资料及案例由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!大家看完有什么不懂的可以在下方留言讨论也可以关注。网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)一个人可以走的很快,但一群人才能走的更远!

2401_84411956的博客 1097

深入理解JVM虚拟机10:JVM常用参数以及实践

本文转自:https://www.rowkey.me/blog/2016/11/02/java-profile/?hmsr=toutiao.io&utmmedium=toutiao.io&utmsource=toutiao.io 本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutoria...

AliCoder的博客 640

Java性能20讲,深度剖析JVM底层原理1024程序员节限时开放)

掌握Java性能核心技术,深度解析JVM底层原理与实战化策略。本1024程序员节视频教程涵盖GC机制、内存模型、并发编程等20大关键主题,适用于高并发、低延迟场景。限时开放,值得收藏。

QuickCode的博客 386

阿里P8大牛呕心沥血整理的《深入浅出Java虚拟机第三版:JVM实战》文档资料免费分享。

前言 Java是目前用户最多、使用范围最广的软件开发技术,Java的技术体系主要由支撑Java程序运行的虚拟机、提供各开发领域接口支持的Java类库、Java编程语言及许许多多的第三E方Java框架(如Spring、 MyBatis等) 构成。在国内,有关Java类库API、Java语言语法及第三方框架的技术资料和书籍非常丰富,相比而言,有关Java虚拟机的资料却显得异常贫乏。 随着Java技术的不断发展,它已被应用于越来越多的领域之中。其中一些领域,如互联网、能源、金融、通信等,对程序的性能、稳定性和

JavaBUGa的博客 449

深入理解Java虚拟机》第2版和第3版的区别,看过第2版还有必要买第3版吗?

持续更新中~~ 博主前言 hello,我是oxye~ 在Java届,《深入理解Java虚拟机 JVM高级特性与最佳实践》是一本经典的书籍了,很多程序员都会买一本,但看不看又是另一回事儿了。 我一开始看也是迷迷糊糊的,因为初级程序员更多的是应用语言,不怎么在乎底层,也不想啃基础太深。 随着不断学习,打扎实基础的过程中,丰富了技术储备,看了很多源码,也从初级变成高级了,再回过头看这本书时,就会顺利很多,也会学到很多知识,不仅加深了自己对Java的理解,也帮我解决了不少实际问题,例如jvm参数整、阅读源码时理解

Oxye 3293

Java性能化实战:从JVM到代码

Java性能化是提升应用效率的关键技术,涉及JVM内存管理、垃圾回收机制和代码执行效率等多个层面。理解JVM工作原理化的基础,包括堆内存划分、GC策略选择等核心概念。通过合理配置JVM参数如-Xms/-Xmx和选择合适的垃圾收集器如G1,可以显著提升应用性能。在代码层面,化对象创建、集合使用和并发编程能有效减少性能开销。这些化技术在高并发系统、大数据处理等场景中尤为重要,能帮助开发者构建更高效的Java应用。本文结合GC日志分析和性能监控工具,提供了一套完整的Java性能化方法论。

weixin_30784501的博客 375

阿里P8写出的《深入理解Java虚拟机3》轻松学会JVM底层

Java是目前用户最多、使用范围最广的软件开发技术,Java的技术体系主要由支撑Java程序运行的虚拟机、提供各开发领域接口支持的Java类库、Java编程语言及许许多多的第三E方Java框架(如Spring、 MyBatis等) 构成。从计算机程序出现的第一天起, 对效率的追逐就是程序员天生的坚定信仰,这个过程犹如一场没有终点、永不停歇的F1方程式竞赛,程序员是车手,技术平台则是在赛道上飞驰的赛车。代码编译的结果从本地机器码转变为字节码,是存储格式发展的一-小步,却是编程语言发展的一大步。

m0_63437643的博客 876

JVM深入理解JAVAJVM虚拟机

深入理解JavaJVM虚拟机 JVM 一直都是面试中考察的重点 JVMJava Virtual Machine):指以软件的方式模拟具有完整硬件系统功能、运行在一个完全隔离环境中的完整计算机系统,是物理机的软件实现 ...

JJJikerUPUP的博客 582

深入理解JVM虚拟机1JVM内存的结构与消失的永久代

本文转自互联网,侵删 本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下Star哈 文章将同步到我的个人博客: www.how2playlife.com 本文是微信公众号【Java技术江湖】的《深入理解JVM虚拟机》其中一篇,本文部分内容来源于网...

AliCoder的博客 1000
上一篇: 【Java-II】注解和反射 P8-10(Day21-20210721-Day3)
下一篇: cannot import name joblib from sklearn.externals
菜菜2022
博客等级 码龄9年 67粉丝 1033原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值