- java编译到执行?
- 跨平台语言到跨语言的平台
- 常见的jvm实现
- jdk jre jvm关系
- Class File Format
java如何执行?
xx.java -- (javac)-- xx.class -- jvm中(classloader加载 --(解释执行 或 jit即时编译)--执行引擎 --调用操作系统os)
跨平台语言到跨语言的平台
符合class文件规范即可到jvm执行。
jvm是一种语言规范。Java Documentation - Get Started
常见的jvm实现
Hotspot:目前使用的最多的 Java 虚拟机。
Jrocket:原来属于BEA 公司,曾号称世界上最快的 JVM,后被 Oracle 公司收购,合并于 Hotspot
J9: IBM 有自己的 java 虚拟机实现,它的名字叫做 J9. 主要是用在 IBM 产品(IBM WebSphere 和 IBM 的 AIX 平台上)
TaobaoVM: 只有一定体量、一定规模的厂商才会开发自己的虚拟机,比如淘宝有自己的 VM,它实际上是 Hotspot 的定制版,专门为淘宝准备的,阿里、天 猫都是用的这款虚拟机。
LiquidVM: 它是一个针对硬件的虚拟机,它下面是没有操作系统的(不是 Linux 也不是 windows),下面直接就是硬件,运行效率比较高。
zing: 它属于 zual 这家公司,非常牛,是一个商业产品,很贵!它的垃圾回收速度非常快(1 毫秒之内),是业界标杆。它的一个垃圾回收的算法后来被 Hotspot 吸收才有了现在的 ZGC。
jdk jre jvm关系
1. JDK
JDK ( Java SE Development Kit ), Java 标准的开发包,提供了编译、运行 Java 程序所需要的各种工具和资源 ,包括了 Java 编译器、 Java 运行时环境、以及常用的 Java 类库等。
2. JRE
JRE ( Java Runtime Environment ) , Java 运行时环境,用于解释执行 Java 的字节码文件 。普通用户只需要安装 JRE 来运行 Java 程序即可,而作为一名程序员必须安装 JDK ,来编译、调试程序。
3. JVM
JVM ( Java Virtual Mechinal ), Java 虚拟机,是 JRE 的一部分。 它是整个 Java 实现跨平台的核心 ,负责解释执行字节码文件,是可运行 Java 字节码文件的虚拟计算机。所有平台上的 JVM 向编译器提供相同的接口,而编译器只需要面向虚拟机,生成虚拟机能识别的代码,然后由虚拟机来解释执行。
Class File Format
使用javap -v xxx.class 也可以查看Class File Format信息。
- magic(魔数)4字节:魔数的作用在于,可以轻松的分辨出java class文件和非java class 文件。
- minnor_version +major_version 4字节:class文件的下面4个字节包含了主、次版本号。
- constant_pool.count 2字节+ constant_pool(constant_pool.count -1的表):常量池包含了与文件中类和接口相关的常量。常量池中存储了诸如文字字符串、final 变量值、类名和方法名的常量。
- access_flags:展示了文件中定义的类或接口的几段信息。
- this_class :它是一个队常量池的索引。
- super_class:在class文件中,紧接在this_class 之后的是 super_class 项,它是一个两个字节的常量池索引。
- interfaces_count 和 intefaces:直接实现或者由接口所扩展的父接口的数量
- ..........................