hive尚硅谷资料 尚硅谷jvm_字节码

JVM概述

为什么要学jvm

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

java语言和jvm

  • 世界还是那个没有最好的编程语言,只有最适用于具体应用场景的编程语言。
  • 互联网基于js,人工智能基于Python,微服务基于go语言。
  • jvm是一个跨语言的平台

hive尚硅谷资料 尚硅谷jvm_面试_02

  • 字节码

  • 字节是电脑里的数据量单位。
    字节码(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,操作系统,编译器。
  • 不同的语言是否可以相互调用?

  • 如何真正搞懂jvm?

  • jdk1.6之后Java开源并建立OpenJdk顺利成章,Hotspot虚拟机成为OpenJDK中的默认虚拟机。
  • 虚拟机和java虚拟机

  • jvm的位置

  • jvm整体结构
  • 这两张图必须会画,心中有图。这两张图主要针对的是Hotspot虚拟机。
  • hive尚硅谷资料 尚硅谷jvm_面试_03

上边这张图分为三层,java虚拟机用于解释运行字节码文件,他的入口是class文件的加载,字节码文件使用类加载器系统,将字节码文件加载到内存中生成class对象(加载链接初始化),在内存中多线程共享堆和方法区,
执行殷勤:操作系统只能识别机器指令,执行殷勤是把字节码文件翻译成机器语言的模块。

hive尚硅谷资料 尚硅谷jvm_字节码_04


  • java代码的执行流程

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

Jvm架构模型

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

hive尚硅谷资料 尚硅谷jvm_java_05


hive尚硅谷资料 尚硅谷jvm_hive尚硅谷资料_06

java发展历程

  • 了解java虚拟机的发展历程,面试的时候可以说出来一些虚拟机。