JVM 基础知识

1. java 从编码到执行

1.1 java 是编译执行的,还是解释执行的?

java 的编译与解释是可以同时存在的,JVM 对于经常被使用的代码会通过 JIT(临时编译器)编译到本地,下次遇到相同的代码就不需要被解析了,可以直接交给操作引擎,这样效率会高很多 。

知识点: JVM 是基于静态编译器的动态编译器,与静态编译器的区别在于 JIT。
在这里插入图片描述

2. 跨语言平台

  • Java 是跨平台语言
  • JVM 是跨语言平台
  • JVM 与 Java 无关,与 class 文件有关。JVM 是规范,任何使用 JVM 的语言都需要提供 class文件或者 在解释过程中提供 class 的二进制流。

2.1 JVM 与 JRE 与 JDK 关联关系

在这里插入图片描述

3. CLASS 文件

代码:

// 没有任何内容的类
package com.zoomkey.custom.scanpay.task;
public class aaabb {
}

class 内容 (16 进制内容)

cafe babe 0000 0034 0010 0700 0201 0025
636f 6d2f 7a6f 6f6d 6b65 792f 6375 7374
6f6d 2f73 6361 6e70 6179 2f74 6173 6b2f
6161 6162 6207 0004 0100 106a 6176 612f
6c61 6e67 2f4f 626a 6563 7401 0006 3c69
6e69 743e 0100 0328 2956 0100 0443 6f64
650a 0003 0009 0c00 0500 0601 000f 4c69
6e65 4e75 6d62 6572 5461 626c 6501 0012
4c6f 6361 6c56 6172 6961 626c 6554 6162
6c65 0100 0474 6869 7301 0027 4c63 6f6d
2f7a 6f6f 6d6b 6579 2f63 7573 746f 6d2f
7363 616e 7061 792f 7461 736b 2f61 6161
6262 3b01 000a 536f 7572 6365 4669 6c65
0100 0a61 6161 6262 2e6a 6176 6100 2100
0100 0300 0000 0000 0100 0100 0500 0600
0100 0700 0000 2f00 0100 0100 0000 052a
b700 08b1 0000 0002 000a 0000 0006 0001
0000 0004 000b 0000 000c 0001 0000 0005
000c 000d 0000 0001 000e 0000 0002 000f

3.1 class 文件的简单了解

类型:表示每个类型占了多少字节,其中 *_info 表示列出各个明细,在本次并不列举出来。

名称:上面的 class 文件内容的排版是按照以下顺序执行的

含义:内容理解,如果内容过多时,用 “ *_引用 ” 的方式抽出

类型

名称

含义

简单解析

u4

magic

JVM 标识,

用于判断是否是 class文件

cafe babe(咖啡宝贝)

u2

minor_version

jdk的小版本号

0000 表示为 0。

例如 :jdk 1.8.0

u2

major_version

jdk 的大版本号

0034H = 52 ,意思为 jdk1.8

与 minor_version 结合使用得到完成的版本号

u2

constant_pool_count

constant_引用

0010 H= 16 ,16个常量,实际为15个,对象的父类Object,所以存在常量

cp_info

constant_pool

各个具体的常量。

此次不列举

u2

access_flags

识别一些类或者接口层次的访问标志

1

u2

this_class

此类名称的索引

1

u2

super_class

父类名称的索引

1

u2

interfaces_count

接口索引数量

1

u2

interfaces

各个接口名称

interfaces_count

u2

fields_count

fields_引用

1

field_info

fields

列出各个类变量和实例变量的字段

fields_count

u2

methods_count

几个方法

1

method_info

methods

列出各个方法,包括里面的方法体内容

methods_count

u2

attribute_count

用于描述某些场景的专有信息属性

1

attribute_info

attributes

attributes_引用

attributes_count

含义的引用

解释

constant_引用

常量池内的数量,实际可用常量为 constant_pool_count - 1,其中存在一个常量 0,如果某些指向常量池索引值的数据在特定情况下需要表达“不引用任何一个常量池项目”的含义,这种情况可以将索引值置为0来表示

fields_引用

描述接口或者类中声明的变量,包括类级变量和实例级变量(是否是static),但不包括在方法内部声明的局部变量

attributes_引用

与Class文件中其它数据项对长度、顺序、格式的严格要求不同,属性表集合不要求其中包含的属性表具有严格的顺序,并且只要属性的名称不与已有的属性名称重复,任何人实现的编译器可以向属性表中写入自己定义的属性信息。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值