尚硅谷JVM全套教程

简介: 尚硅谷JVM全套教程


JVM概述

为什么要学jvm

  • 中高级程序员必备技能
  • 追求极客精神:垃圾回收算法,JIT,底层原理。
  • 面试的需要
    懂得jvm的内存结构,工作机制是设计高拓展性应用和诊断运行时问题的基础。

java语言和jvm

  • 世界还是那个没有最好的编程语言,只有最适用于具体应用场景的编程语言。
  • 互联网基于js,人工智能基于Python,微服务基于go语言。
  • jvm是一个跨语言的平台
  • 只需要各自的语言通过各自的编译器编译成具有规范的字节码文件就可以在jvm上运行。jvm识别的字节码文件必须是cafababy,自java7之后jvm平台上可以运行非java语言编写的程序。

  • 字节码
  • 我们平时所说java字节码,指的是用java语言编译之后的字节码文件,应该叫做java字节码。不同的编译器,可以编译出相同的字节码文件,字节码文件可以在不同的jvm上运行;java虚拟机与java语言并没有必然的联系,jvm只与特定的二进制字节码文件进行关联,class文件中包含了java虚拟机的指令集,(字节码,bytecodes)和符号表,还有一些其他的辅助信息。
  • 字节是电脑里的数据量单位。
    字节码(Byte-code)是一种包含执行程序、由一序列 op 代码/数据对组成的二进制文件。字节码是一种中间码,它比机器码更抽象。它经常被看作是包含一个执行程序的二进制文件,更像一个对象模型。字节码被这样叫是因为通常每个 opcode 是一字节长,但是指令码的长度是变化的。每个指令有从 0 到 255(或十六进制的: 00 到FF)的一字节操作码,被参数例如寄存器或内存地址跟随。
    在计算机中,数据只用0和1两种表现形式,(这里只表示一个数据点,不是数字),一个0或者1占一个“位”,而系统中规定8个位为一个字节,用来表示常用的256个字母、符号、控制标记,其中用一个位来进行数据校验,其他七个位用来记录数据。
    按计算机中的规定,一个英文的字符占用一个字节,(如,."':;avcAVC都占用一个字节),而一个汉字以及汉字的标点符号、字符都占用两个字节,(如,。“”:;AVCavc他们就得占用两个字节)。
    另外,他们是没有办法比较的,只能将一个字符占用一个字节,N个字符占用N个字节。
    K是千 M是兆 G是吉咖 T是太拉 8bit(位)=1Byte(字节) 1024Byte(字节)=1KB 1024KB=1MB 1024MB=1GB 1024GB=1TB 1024TB=1PB 1024PB=1EB 1024EB=1ZB 1024ZB=1YB 1024YB=1BB
    最大的计量单位是1BB (Brontobyte)= 1024 YB=10^27
    附:进制单位全称及译音
    yotta,[尧]它,Y. 10^24,
    zetta,[泽]它,Z. 10^21,
    exa,[艾]可萨,E. 10^18,
    peta,[拍]它,P. 10^15,
    tera,[太]拉,T. 10^12,
    giga,[吉]咖,G. 10^9,
    mega,[兆],M. 10^6,
    kilo,[千],K. 10^3
    Java中,字节码是CPU构架(JVM)的具有可移植性的机器语言。
  • 三大难题:CPU,操作系统,编译器。
  • 不同的语言是否可以相互调用?
  • 不同的语言之间是可以相互调用的,例如我们的java语言可以调用c语言。
  • 如何真正搞懂jvm?
  • Java虚拟机原理非常复杂,真正理解他的原理最好的工作原理就是自己动手编写一个Java虚拟机,天下事有难易乎?为之,则难者亦易已,不为,则易者亦难矣。

  • jdk1.6之后Java开源并建立OpenJdk顺利成章,Hotspot虚拟机成为OpenJDK中的默认虚拟机。
  • 虚拟机和java虚拟机
  • 虚拟机就是一台虚拟的计算机,是一款软件,用来执行一系列的虚拟计算机指令,虚拟机可分为程序虚拟机和系统虚拟机,系统虚拟机VMvare,完全是对物理计算机的一个仿真,提供了一个可以运行完整操作系统的软件平台。程序虚拟机是为了执行单个程序而设计的,例如jvm是为了运行字节码二进制文件而设计的,所有的java程序都运行在java虚拟机内部,对于jvm来讲原材料就是字节码文件。

  • jvm的位置


  • jvm整体结构
  • 这两张图必须会画,心中有图。这两张图主要针对的是Hotspot虚拟机。

上边这张图分为三层,java虚拟机用于解释运行字节码文件,他的入口是class文件的加载,字节码文件使用类加载器系统,将字节码文件加载到内存中生成class对象(加载链接初始化),在内存中多线程共享堆和方法区,

执行殷勤:操作系统只能识别机器指令,执行殷勤是把字节码文件翻译成机器语言的模块。

  • 解释器,即时编译器(javac是编译器的前端,这个相当于是编译器的后端),垃圾处理器,在我们的执行引擎当中。
  • java代码的执行流程


java 文件通过前端编译器之后生成class文件,字节码文件经过类加载之后,通过执行引擎翻译成机器指令给操作系统进行执行(操作系统只能识别01这样的机器指令)。

Jvm架构模型

java编译器输入的指令流基本上是一种基于栈的指令集架构,另外一种指令集架构是基于寄存器的指令集架构。

java发展历程

  • 了解java虚拟机的发展历程,面试的时候可以说出来一些虚拟机。
相关文章
|
6月前
|
算法 数据可视化 Java
深入理解JVM系列教程(完) - 终章总结
深入理解JVM系列教程(完) - 终章总结
35 0
|
6月前
|
Java 编译器
深入理解JVM系列教程(12) - 热部署
深入理解JVM系列教程(12) - 热部署
58 0
|
6月前
|
监控 数据可视化 Java
深入理解JVM系列教程(09) - JDK可视化工具
深入理解JVM系列教程(09) - JDK可视化工具
28 1
|
6月前
|
数据采集 监控 算法
深入理解JVM系列教程(07) - 垃圾收集器
深入理解JVM系列教程(07) - 垃圾收集器
33 0
|
6月前
|
Java
深入理解JVM系列教程(06) - 内存溢出与泄漏
深入理解JVM系列教程(06) - 内存溢出与泄漏
35 0
|
6月前
|
存储 Java 编译器
深入理解JVM系列教程(02) - Java内存结构
深入理解JVM系列教程(02) - Java内存结构
146 0
|
算法 前端开发 JavaScript
jvm 教程动画版
最近在最大的同性交友网站,找到了一个比较好的jvm教程。地址是这个https://github.com/visualizit/vpoc 。我把它下载下来看了一下源代码。
jvm 教程动画版
|
6月前
|
存储 安全 前端开发
深入理解JVM系列教程(11) - 类加载器
深入理解JVM系列教程(11) - 类加载器
57 1
|
6月前
|
Java API Apache
深入理解JVM系列教程(10) - 字节码技术
深入理解JVM系列教程(10) - 字节码技术
46 1
|
6月前
|
搜索推荐 Java 应用服务中间件
深入理解JVM系列教程(08) - Tomcat调优配置
深入理解JVM系列教程(08) - Tomcat调优配置
65 0