Java-JVM类文件结构
简介
在Java中,被 JVM 可以理解的代码称为字节码,即扩展名为 .class 的文件,这种文件被称为字节码文件,也可以称为类文件或者Class文件。
Java使用Java编译器(javac)可以将Java代码编译为字节码存储的Class文件,其他语言也可以使用自己的编译器将代码编译成Class文件,例如JRuby通过jrubyc编译器生成、Groovy通过groovyc编译器生成、Kotlin通过kotlinc编译器生成等。
编译生成后的Class文件被JVM虚拟机执行,不受操作系统平台影响,因此具有“一次编译,到处运行”的特性。
🔔温馨提示:本章内容偏硬核,基本就是一个硬背字典的概念,建议结合 “手撕”Class文件结构 一起阅读,边看边上手最好。
类文件结构
任何一个Class文件都对应着唯一的一个类或接口的定义信息,但是反过来说,类或接口并不一定都得定义在文件里(譬如类或接口也可以动态生成,直接送入类加载器中)。
Class文件是一组紧凑排列的二进制流,,各个数据项目按照顺序排列,没有分隔符,这使得整个Class文件中存储的内容几乎全部是程序运行的必要数据,没有空隙存在。 ...
Java-JVM基础
前言
JVM是Java进阶之路中非常重要的一步,因此写下本文,用一篇文章对JVM知识点做一个总结。
JVM知识体系比较多,本文将采用“想到什么说什么“的思维编写,个人感觉这样更容易引发学习思考,面对有难度的知识点,可以由浅入深,一点点的了解。
最后,再大概了解完JVM的所有知识点后,再做一个核心知识点总结,用于整理归纳。
JVM是什么
首先,在听到一个新单词时,不禁会产生疑问,它是什么?所以JVM是什么呢?
JVM全名 Java Virtual Machine ,中文名 Java虚拟机。顾名思义,它是一个虚拟化的计算机。
Q:JVM作为虚拟化机器,能做什么呢?
它能执行Java字节码,将Java字节码翻译成机器代码,供操作系统执行,实现Java“一次编译,到处运行“的特性。
Q:出现了新单词 - Java字节码,什么是Java字节码呢?
Java字节码(Java Bytecode)是Java编程语言编译后生成的一种中间表示形式。它是与平台无关的二进制代码,JVM能够直接理解和执行它。反过来说,Java字节码需要JVM进行解释,才能够被机器直接执行。
Q:Java字节码是怎么产生的呢?
...
再见SpringFox,你好SpringDoc
前言
最近项目使用 SpringBoot 3 + Spring 6 搭建,接口文档准备一如既往的使用 Swagger 自动生成,引入 springfox-boot-starter 依赖,配置好相关的 Swagger 配置,结果启动报错,修改配置后启动不报错了,但是访问 swagger-ui/index.html 页面报404。
问题分析
一顿分析过后发现,最新的 springfox 3.0.0 (最后一次维护在2020年)仅支持 Spring 5.x,要想使用 springfox,最简单快捷的方式就是降版本,将 SpringBoot 的版本号从 3.x 修改为 2.7.x(或更低版本)。
新项目就是想体验最新的 SpringBoot 版本功能,这样一搞,岂不是本末倒置了,因此我就尝试了各种方法,企图通过修改 Spring Bean 属性等方式适配 Swagger ,结果发现 Spring 里面的对象属性是一层嵌一层,牵一发而动全身,菜鸡的我只好放弃。
企图尝试:
注册 WebMvcConfigurer Bean,重写 configurePathMatch(PathMatchConfi ...
Git学习-Git内部原理
第十章学习 Git 内部工作原理和实现方式。
Git学习-Git与其他系统
第九章学习 Git 与其他VCS项目的交互。
Git学习-自定义Git
第八章学习借助 Git 的一些重要的配置方法和钩子机制,来满足自定义的需求。
Git学习-Git工具
第七章学习 Git 工具,这些工具的也是 Git 的重要一环,包含有修订版本、贮藏、重置等十分强大的功能,这些功能在日常操作中不一定经常使用,但在特殊情况下确实非常受用的。
工作小结-接入钉钉机器人
2024-01-13工作小结,整理钉钉机器人API的使用和封装。
工作小结-MyBatis-Plus填充策略
2024-01-10工作小结,了解MyBatis-Plus填充策略的使用和工作原理。
工作小结-ShedLock的使用
2024-01-08工作小结,了解ShedLock的使用和工作原理。















