android 初识JVM

1 JVM概念
JVM是Java Virtual Machine的简称。意味Java虚拟机
虚拟机

指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统
有哪些虚拟机
VMWare
Visual Box
JVM
VMWare或者Visual Box都是使用软件模拟物理CPU的指令集
JVM使用软件模拟Java 字节码的指令集
2 初识JVM-Java和JVM的历史
1996年 SUN JDK 1.0 Classic VM

纯解释运行,使用外挂进行JIT
1997年 JDK1.1 发布

AWT、内部类、JDBC、RMI、反射
1998年 JDK1.2 Solaris Exact VM

JIT 解释器混合
Accurate Memory Management 精确内存管理,数据类型敏感
提升的GC性能
2000年 JDK 1.3 Hotspot 作为默认虚拟机发布
2002年 JDK 1.4 Classic VM退出历史舞台
2004年发布 JDK1.5 即 JDK5 、J2SE 5 、Java 5

泛型
注解
装箱
枚举
可变长的参数
Foreach循环
JDK1.6 JDK6

脚本语言支持
JDBC 4.0
Java编译器 API
2011年 JDK7发布

延误项目推出到JDK8
G1
动态语言增强
64位系统中的压缩指针
NIO 2.0
2014年 JDK8发布

Lambda表达式
语法增强 Java类型注解
2016年JDK9

模块化
3 Java和JVM的历史
使用最为广泛的JVM为HotSpot
HotSpot 为Longview Technologies开发 被SUN收购
2006年 Java开源 并建立OpenJDK

HotSpot 成为Sun JDK和OpenJDK中所带的虚拟机
2008 年 Oracle收购BEA
得到JRockit VM
2010年Oracle 收购 Sun
得到Hotspot
Oracle宣布在JDK8时整合JRockit和Hotspot,优势互补
在Hotspot基础上,移植JRockit优秀特性
4 规范
4.1 Java语言规范
语法
变量
类型
文法
4.1.1 Java语言规范

语法定义
IfThenStatement
if(Expression)Statement : if(true){do sth;}
ArgumentList;
Argument
ArgumentList , Argument
词法结构
\u + 4个16进制数字 表示UTF-16
行终结符: CR, or LF, or CR LF.
空白符
空格 tab \t 换页 \f 行终结符
注释
Identifier: IdentifierChars but not a Keyword or BooleanLiteral or NullLiteralIdentifierChars: JavaLetter IdentifierChars JavaLetterOrDigitJavaLetter: any Unicode character that is a Java letter (see below)JavaLetterOrDigit: any Unicode character that is a Java letter-or-digit (see below)
Int
0 2 0372 0xDada_Cafe 1996 0x00_FF__00_FF 允许下划线表示int 类型
Long
0l 0777L 0x100000000L 2_147_483_648L 0xC0B0L
Float
1e1f 2.f .3f 0f 3.14f 6.022137e+23f
Double
1e1 2. .3 0.0 3.14 1e-9d 1e137
操作
+= -= *= /= &= |= ^= %= <<= >>= >>>=
类型和变量
元类型
byte short int long float char

变量初始值
boolean false
char \u0000
泛型
4.2 JVM规范
Class 文件格式
数字的内部表示和存储
Byte -128 to 127 (-27 to 27 - 1)
returnAddress 数据类型定义
指向操作码的指针。不对应Java数据类型,不能在运行时修改。Finally实现需要
定义PC


方法区
4.2.1整数的表达

原码:第一位为符号位(0为正数,1为负数)
反码:符号位不动,原码取反
负数补码:符号位不动,反码加1
正数补码:和原码相同
打印整数的二进制表示
int a=-6;
for(int i=0;i<32;i++){
int t=(a & 0x80000000>>>i)>>>(31-i);
System.out.print(t);
}
4.2.2 Float的表示与定义

支持 IEEE 754

s eeeeeeee mmmmmmmmmmmmmmmmmmmmmmm
e全0 尾数附加位为0 否则尾数附加位为1
sm2^(e-127)
-5
11000000101000000000000000000000
-1*2(129-127)*(20+2^-2)
4.2.3 一些特殊的方法

4.3 VM指令集

类型转化
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> [ <operand1> [ <operand2>... ]] [<comment>]
java程序

  void spin() {
  int i; 
  for (i = 0; i < 100; i++) { ;
     // Loop body is empty
   }
 } 
JVM指令

0   iconst_0       // Push int constant 0
1   istore_1       // Store into local variable 1 (i=0)
2   goto 8         // First time through don't increment
5   iinc 1 1       // Increment local variable 1 by 1 (i++)
8   iload_1        // Push local variable 1 (i)
9   bipush 100     // Push int constant 100
11  if_icmplt 5    // Compare and loop if less than (i < 100)
14  return         // Return void when done
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安卓兼职framework应用工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值