初识JVM

JVM概念

JVM是Java Virtual Machine 的简称,意为Java虚拟机

虚拟机

指通过软件模拟的具有完整硬件系统功能的,运行在一个完全隔离环境中的完整计算机系统

有哪些虚拟机

VMWare
Visual Box
JVM
VMWare 或者 Visual Box都是使用软件模拟物理CPU的指令集
JVM 使用软件模拟Java字节码的指令集

Java语言规范

语法

    ex: if (Expression) Statement

词法结构

    \u + 4个16进制数字,表示UTF-16
    行终结符: CR, LF, CR LF
    空白符: 空格 \t 、\f 
    注释
    标识符
    关键词

变量

    元类型: byte,short,int,long,float,char
    变量初始化: boolean: false, char : \u0000
    泛型
类型
文法
java内存模型
类加载链接的过程
public static final abstract的定义
异常
数组的使用
。。。

JVM规范

  • Class文件类型
  • 运行时数据
  • 帧栈
  • 虚拟机的启动
  • 虚拟机的指令集

    Java 语言规范规定了什么是Java语言
    Java语言和JVM相对独立
    Groovy
    Clojure
    Scala
    这些语言都可以运行在JVM上,但他并不是java

    JVM主要定义二进制class文件和JVM指令集等

JAVA规范定义的主要内容

Class文件格式
数字的内部表示和存储
return Address 数据类型定义
    - 执行操作码的操作,不对应Java数据类型,不能再运行时修改
定义PC
堆
栈
方法区

整数的表达:

原码: 第一位为符号位 (0为正数,1为负数)
反码:符号位不懂,原码取反
负数补码:符号位不动,反码加1
正数补码:和原码相同

正数表达例子

打印正数的二进制的代码展示

int a = -6;
for (int i = 0; i < 32; i++){
    int t = (a & 0x80000000 >>> i) >>> (32 - i);
    System.out.println(t);
}

为什么要用补码?

计算0的表示
0 既是正数,也是负数
所以用补码可以让0正确表示

0的补码表示

其次,用补码可以很好的参与计算机中二进制的计算

补码的加减计算

Float的表示与定义

- 支持 IEEE 754

IEEE 754 的原理

-5 在计算机中的表示

JVM指令集

类型转化
    l2i
出栈入栈操作
    aload astore
运算
    iadd, isub
流程控制
    ifeq,ifne
函数调用
    invokevirtual invokeinterface invokespecial invokestatic

JVM需要对Java Library提供一下支持

反射 java.lang.reflect
ClassLoader
初始化 class 和 interface
安全相关 java.security
多线程
弱引用

JVM的编译

源码到JVM指令的对应格式
Javap
JVM反汇编的格式
    < index> < opcode> [< operad1>< operand2>...] [< comment>] 

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值