初步了解JVM

本文详细介绍了JVM(Java虚拟机)的概念,包括其定义、主要功能及组成部分,如class文件格式、指令集、堆、栈、方法区等。同时探讨了JVM如何处理数据类型,如整数和浮点数的内部表示,以及JVM指令集的基本操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JVM的概念

1、 JVM 是Java Virtual Machine的简称,翻译为Java虚拟机。

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

3、常见的虚拟机有:

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

JVM的规范定义:jvm主要定义了二进制class文件和JVM指令集等

1、class文件格式
2、数字的内部表示和存储
3、returnAddress数据类型定义

  • 指向操作码的指针。不对应Java数据类型,不能在 运行时修改。Finally实现需要。
    4、定义PC
    5、堆
    6、栈
    7、方法区
    8、整数表达式(二进制)
  • 原码:第一位为符号位(0为正数,1为负数)
  • 反码: 符号位不动,原码取反。
  • 负数补码: 符号位不动,反码加1。
  • 正数补码: 和原码相同。
    示例:
    在这里插入图片描述
    负数在计算机表现形式就是补码的形式了。
    在程序中打印整数的二进制表示:
 int a = -6;
     for(int i = 0; i < 32; i ++){
         int t = (a & 0x80000000 >>> i) >>>(31-i);
         System.out.println(t);
     }

9、为什么要用补码?
1)能很好的对0进行表示:0既不是负数也不是正数,如果把0看做正数就是00000000,如果把0看做负数,补码后的结果也是00000000
在这里插入图片描述
2)方便计算:如果是用补码表示整数,那么只要对应位置上的0和1相加就可以了。
在这里插入图片描述
10、浮点数(float 四个字节)的表示

  • 支持IEEE 754标准(二进制浮点数算数标准)
    1)s为1表示负数,0表示正数。
    2)e为指数8位
    3)m为尾数23位,如果e不全为0,实际尾数为24位。
    在这里插入图片描述
    示例:
    因为e不全为0,附加位为1,所以m计算为20+0*2-1+1*2^-2+…后面都为0。单精度的-5就如下表示
    在这里插入图片描述
    11、jvm中定义了一些特殊的方法
  • 类的初始化方法
  • 实例的初始化方法
    例如:java中没有声明一个类的构造函数,jvm会自动构造一个无参的构造方法。
    12、JVM指令集
  • 类型转化 ----------> l2i
  • 出栈入栈操作 -------> aload astore
  • 运算 ---------> iadd isub
  • l流程控制 --------> ifeq ifne
  • 函数调用----------> invokevirtual invokeinterface invokespecial invokestatic
    13、JVM需要对Java library提供以下支持
  • 反射 java.lang.reflect
  • ClassLoader
  • 初始化class 和interface
  • 安全相关 java.security
  • 多线程
  • 弱引用
    14、JVM的编译
  • 源码到JVM指令的对应格式
  • Javap
  • JVM反汇编的格式
<index><opcode>[<operand1>[<operand2>]] [<comment>]

(在jvm中直接执行的是jvm的指令代码,下图右侧。)
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值