JVM概述
为什么要学jvm
- 中高级程序员必备技能
- 追求极客精神:垃圾回收算法,JIT,底层原理。
- 面试的需要
懂得jvm的内存结构,工作机制是设计高拓展性应用和诊断运行时问题的基础。
java语言和jvm
- 世界还是那个没有最好的编程语言,只有最适用于具体应用场景的编程语言。
- 互联网基于js,人工智能基于Python,微服务基于go语言。
- jvm是一个跨语言的平台
- 字节码
- 字节是电脑里的数据量单位。
字节码(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虚拟机。
上边这张图分为三层,java虚拟机用于解释运行字节码文件,他的入口是class文件的加载,字节码文件使用类加载器系统,将字节码文件加载到内存中生成class对象(加载链接初始化),在内存中多线程共享堆和方法区,
执行殷勤:操作系统只能识别机器指令,执行殷勤是把字节码文件翻译成机器语言的模块。
- java代码的执行流程
java 文件通过前端编译器之后生成class文件,字节码文件经过类加载之后,通过执行引擎翻译成机器指令给操作系统进行执行(操作系统只能识别01这样的机器指令)。
Jvm架构模型
java编译器输入的指令流基本上是一种基于栈的指令集架构,另外一种指令集架构是基于寄存器的指令集架构。
java发展历程
- 了解java虚拟机的发展历程,面试的时候可以说出来一些虚拟机。