详解.class文件

详解.class文件

话不多说,直接上图

img

.class文件理解:

  • 在 Java 中,JVM 可以理解的代码就叫做字节码(即扩展名为 .class 的文件),它不面向任何特定的处理器,只面向虚拟机。Java 语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题并且保留了解释型语言可移植的特点,而通过即时编译器(jit)又有编译型语言执行效率高的特点。所以 Java 程序运行时比较高效。Java通过字节码文件和虚拟机jvm之间的关系,做到了平台无关性,一次编译,各平台都可运行。

  • 补充Clojure(Lisp 语言的一种方言)、Groovy、Scala 等语言都是运行在 Java 虚拟机之上。下图展示了不同的语言被不同的编译器编译成.class文件最终运行在 Java 虚拟机之上。.class文件的二进制格式可以使用 WinHex 查看

    java虚拟机

  • 为什么说java是编译与解释共存

  • JIT即时编译器

class文件结构

  • 根据 Java 虚拟机规范,Class 文件通过 ClassFile 定义,有点类似 C 语言的结构体。

在这里插入图片描述

魔数

每个Class文件的头4个字节被称为魔数(Magic Number) , 它的唯一作用是确定这个文件是否为一个能被虚拟机接受的Class文件。Class文件的魔数取得很有“浪漫气息”,
值为0xCAFEBABE(咖啡宝贝? )
  紧接着魔数的4个字节存储的是Class文件的版本号: 第5和第6个字节是次版本号(MinorVersion) , 第7和第8个字节是主版本号(Major Version)

这里我们使用一个简单的代码进行分析:
复制代码

public class TestClass {
    private int m;
    public int inc() {
        return m + 1;
    }
}

复制代码

使用javac命令对其进行编译,并使用WinHex (下载地址:http://www.x-ways.net/winhex/index-m.html)工具打开,得到如下的图,前面几位就是魔数和版本号

img

这里可以得出我们使用的版本为java1.8,16进制的34等于10进制的52

img

常量池

紧接着主、 次版本号之后的是常量池入口, 常量池可以比喻为Class文件里的资源仓库, 它是Class文件结构中与其他项目关联最多的数据, 通常也是占用Class文件空间最大的数据项目之一。

常量池中主要存放两大类常量: 字面量(Literal) 和符号引用(Symbolic References)

常量池的入口需要放置一项u2类型的数据, 代表常量池容量计数值(constant_pool_count) ,这个容量计数是从1开始的。如下图所示:常量池容量(偏移地址: 0x00000008) 为十六进制数0x0013,则十进制为19,由于0(0算一个值)空出来,则这里有18个长常量索引范围为1-18,在Class文件格式规范制定之时, 设计者将第0项常量空出来是有特殊考虑的, 这样做的目的在于, 如果后面某些指向常量池的索引值的数据在特定情况下需要表达“不引用任何一个常量池项目”的含义, 可以把索引值设置为0来表示。

img

然后我们使用javap命令查看该class文件:(这里明显显示为18个常量)

img

常量池中主要存放两大类常量: 字面量(Literal) 和符号引用(Symbolic References)

字面量比较接近于Java语言层面的常量概念, 如文本字符串、 被声明为final的常量值等。

符号引用则属于编译原理方面的概念, 主要包括下面几类常量:

  1. 被模块导出或者开
  • 10
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在 Nacos 中,application.properties 文件是 Nacos 的配置文件之一,用于配置 Nacos 的基本属性和特性。以下是 application.properties 文件中常见的配置项及其说明: 1. server.port:Nacos 服务端口号,默认为 8848。 2. spring.datasource.platform:Nacos 数据库类型,默认为 MySQL。 3. db.num:Nacos 数据库数量,建议设置为 1。 4. db.url:Nacos 数据库 URL。 5. db.username:Nacos 数据库用户名。 6. db.password:Nacos 数据库密码。 7. db.driver-class-name:Nacos 数据库驱动类名。 8. db.connectionTimeout:Nacos 数据库连接超时时间。 9. db.maximumPoolSize:Nacos 数据库连接池最大连接数。 10. db.minimumIdle:Nacos 数据库连接池最小空闲连接数。 11. db.maxLifetime:Nacos 数据库连接池最大生命周期。 12. h2.console.enabled:是否启用 H2 控制台,默认为 false。 13. spring.datasource.hikari.connection-test-query:连接测试查询语句。 14. server.tomcat.accesslog.enabled:是否启用 Tomcat 访问日志。 15. server.tomcat.accesslog.pattern:Tomcat 访问日志格式。 16. server.tomcat.accesslog.directory:Tomcat 访问日志目录。 17. server.tomcat.accesslog.prefix:Tomcat 访问日志文件名前缀。 18. server.tomcat.accesslog.suffix:Tomcat 访问日志文件名后缀。 19. server.tomcat.accesslog.rotate:Tomcat 访问日志是否滚动。 20. server.tomcat.accesslog.rotate.renameOnRotate:Tomcat 访问日志是否更名。 21. server.tomcat.accesslog.rotate.maxDays:Tomcat 访问日志最大保留天数。 22. server.tomcat.accesslog.rotate.enabled:Tomcat 访问日志是否启用滚动。 23. management.server.port:管理端口号,默认为 8849。 24. spring.application.name:应用名称。 25. spring.cloud.nacos.config.server-addr:Nacos 服务器地址。 26. spring.cloud.nacos.config.namespace:Nacos 命名空间。 27. spring.cloud.nacos.config.file-extension:配置文件扩展名。 28. spring.cloud.nacos.config.group:配置文件分组。 29. spring.cloud.nacos.config.prefix:配置文件前缀。 30. spring.cloud.nacos.config.shared-dataids:共享配置文件 ID。 以上是 application.properties 文件中常见的配置项及其说明,可以根据实际需求进行配置。需要注意的是,在修改配置文件后,需要重启 Nacos 才能生效。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值