当前位置:首页 > Java技术 > JVM开篇

JVM开篇

2022年09月16日 11:14:33Java技术2

关于JVM JDK 和JRE最详细通俗的解答

JVM

什么是字节码?采用字节码的好处是什么?

在Java中,JVM可以理解的代码就叫做字节码(即扩展名为.class的文件),他不面向任何特定的处理器,只面向虚拟机

Java语言通过字节码的方式,在一定程度上解决了传统解释型语言效率低的问题,同时又保留解释型语言可移植性的特点。

所以Java程序运行时比较高效,而且,由于字节码并不针对一种特定的机器,因此,Java程序无须重新编译便可在多种不同操作系统的计算机上运行。

Java程序从源代码到运行一般有下面3步

JVM开篇 _ JavaClub全栈架构师技术笔记

我们需要格外注意的是.class->机器码这一步。在这一步JVM类加载器首先加载字节码文件,然后通过解释器逐行解释执行,这种方式的执行速度会相对较慢,而且,有些方法和代码块是经常需要被调用的(也就是所谓的热点代码),所以后面引进了JIT编译器,而JIT属于运行时编译。当JIT编译器完成第一次编译后,其会将字节码对应的机器码保存下来,下次可以直接使用。而我们知道,机器码的运行效率肯定是高于Java解释器的。这也解释了我们为什么经常会被说Java是编译与解释共存的语言。

HotSpot采用了惰性评估(Lazy Evaluation)的做法,根据二八定律,消耗大部分系统资源的只有那一小部分的代
码(热点代码),而这也就是JIT所需要编译的部分。JVM会根据代码每次被执行的情况收集信息并相应地做出一些
优化,因此执行的次数越多,它的速度就越快。JDK 9引入了一种新的编译模式AOT(Ahead of Time 
Compilation),它是直接将字节码编译成机器码,这样就避免了JIT预热等各方面的开销。JDK支持分层编译和AOT
协作使用。但是 ,AOT 编译器的编译质量是肯定比不上 JIT 编译器的。

总结:

Java虚拟机(JVM)是运行Java字节码的虚拟机。JVM有针对不同系统的特定实现(windows、linux、macOS),

目的是使用相同的字节码,他们都会给出相同的结果。字节码和不同系统的JVM实现是Java语言:一次编译,随处可以运行

的关键所在。

JDK和JRE

JDK是Java Development Kit,它是功能齐全的Java SDK。他拥有JRE所拥有的一切,还有编译器(javac)和

工具(如javadao和jdb)。他能够创建和编译程序。

JRE是Java运行时环境。它是运行已编译Java程序所需的所有内容的集合,包括Java虚拟机(JVM),Java类库,java命令和其他的一些基础构件。但是,他不能用于创建新程序。

如果你只是为了运行一下Java程序的话,那么你只需要安装JRE就可以了。如果你需要进行一些Java编程方面的工作,那么你就需要安装JDK了。但是,这不是绝对的。有时,即使你不打算在计算上进行任何Java开发,仍然需要安装JDK。例如,如果要使用JSP部署Web应用程序,那么从技术上讲,你只是在应用程序中运行Java程序。那你为什么需要JDK呢?因为应用服务器会将JSP转换成Java servlet,需要使用JDK来编译servlet。

  • 方法论(正确的学习方式)
    • 有输入必须要有输出
      • 写blog,记笔记。
      • 帮助别人,查缺补漏。
      • 做项目。
    • 深入学会了技术一门技术,过了一段时间却忘记好多东西
      • 没有产生持久化保存(没有输出)
        • 例子:呼吸:如果一直吸气,不呼气,早晚会被憋死。
    • 使自己保持竞争力
      • 不要因为项目用不到,而不去学习一门技术
      • 使自己可以独立于公司而存在
      • 使自己溢价
    • 书、视频不要看超过三次(超过学习方式有问题)
      • 做笔记,变成自己的
      • 学习了就要掌握住,不要做无用功
      • 学习效率非常重要,每一分钟是否达到了它的价值
  • 如何学习JVM
    • 相比于Spring Boot、Spring Cloud等框架。
      • 见效慢,框架可以直接使用,而JVM是底层。
      • 应用型框架:照猫画虎、能启动就行。
    • JVM是底层,稍显枯燥
  • 多读书

JDK自带工具

jconsole

JVM开篇 _ JavaClub全栈架构师技术笔记

JVM开篇 _ JavaClub全栈架构师技术笔记

jvisualvm

oracle提供的jdk的可视化工具

JVM开篇 _ JavaClub全栈架构师技术笔记

好新鲜,尝试一波。

作者:Hydra.
来源链接:https://blog.csdn.net/qq_40657585/article/details/100100764

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/java/41695.html

分享给朋友:

“JVM开篇” 的相关文章

性能优化|一张图带你了解JVM是如何进行内存分配

性能优化|一张图带你了解JVM是如何进行内存分配

对象优先在新生代分配 如果对象能够在eden区分配,那么就直接在eden区分配 如果eden区域大小不够新对象存储的话,则会触发一次minor gc, 如果minor gc后发现对象也无法在s区分配,则会直接在老年代中分配...

Java虚拟机16:Metaspace

Java虚拟机16:Metaspace

被废弃的持久代 想起之前面试的时候有面试官问起过我一个问题:Java 8为什么要废弃持久代即Metaspace的作用。由于当时使用的Java 7且研究重心不在JVM上,一下没有回答上来,今天突然想起这个问题,就详细总结一下这个问题。 首先我们看一张JVM内存布局的图:...

jvm优化——运行参数篇

jvm优化——运行参数篇

在这篇文章中主要介绍jvm的一些运行参数 对jvm优化总结篇可以阅读:JVM优化——总结篇 1、jvm的运行参数 1.1、三种参数类型 jvm的参数类型分为三种,分别是: 1、标准参数: 标准参数的意思是说一般比较稳定,在以后jvm的版...

jvm中关于slot的理解

jvm中关于slot的理解

jvm中关于slot的理解 参数值的存放总是在局部变量数组的index0开始,到数组长度-1的索引结束。 局部变量表,最基本的存储单元是slot(变量槽) 局部变量表中存放编译期可知的各种基本数据类型(8种),引...

Java虚拟机5:Java垃圾回收(GC)机制详解

Java虚拟机5:Java垃圾回收(GC)机制详解

哪些内存需要回收? 哪些内存需要回收是垃圾回收机制第一个要考虑的问题,所谓“要回收的垃圾”无非就是那些不可能再被任何途径使用的对象。那么如何找到这些对象? 1、引用计数法 这个算法的实现是,给对象中添加一个引用计数器,每当一个地方引用这个对象时,计数器值+1;当引用失...

jvisualVm监控远程的jvm

jvisualVm监控远程的jvm

jvisualVm是Netbeans的profile子项目,已在JDK6.0 update 7 中自带(java启动时不需要特定参数,监控工具在bin/jvisualvm.exe),能够监控线程,内存情况,查看方法的CPU时间和内存中的对 象,已被GC的...

jvm查看full gc频率

jdk版本1.8 查看java进程 ]#jps 24019 user.jar 25885 Jps 26958 Main 目标进程24019 监控jvm,每5秒打印一次 ]# jstat -gc 24019 5000 S0C S...

线上jvm 内存飙高排查

线上jvm 内存飙高排查

1.jps查看java进程的pid 2.使用jmap把内存导出,查看是哪些对象占用内存高 jmap -histo 16352 >f:/dev/histo.txt 3. 使用jmap查看堆内存的使用情况 jmap -heap 16...

JVM-内存模型

JVM-内存模型

线程栈空间 包括程序计数器、虚拟机栈和本地方法栈 程序计数器 程序计数器是一块很小的内存空间,主要用来记录各个线程执行的字节码的地址,例如,分支、循环、跳转、异常、线程恢复等都依赖于计数器。由于 Java 是多线程语言,当执行的线程数量超过 CPU 核数时,线程之间会...

jvm内存模型,java类从编译到加载到执行的过程,jvm内存分配过程

jvm内存模型,java类从编译到加载到执行的过程,jvm内存分配过程

一、jvm内存模型 JVM 内存模型主要分为堆、程序计数器、方法区、虚拟机栈和本地方法栈 1、堆 1.1、堆是 JVM 内存中最大的一块内存空间。 1.2、该内存被所有线程共享,几乎所有对象和数组都被分配到了堆内存中。 1.3、堆被划分为新生代和老...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。