java类文件中的体系结构意味着什么?

java类文件中的体系结构意味着什么?,java,tomcat,Java,Tomcat,我刚刚构建了Tomcat7,并使用file命令检查生成的类文件,它打印如下 output/classes/org/apache/coyote/AbstractProcessor$1.class: compiled Java class data, version 52.0 [64-bit architecture=65593] [architecture=6382440] output/classes/org/apache/coyote/AbstractProcessor.class:

我刚刚构建了Tomcat7,并使用
file
命令检查生成的类文件,它打印如下

output/classes/org/apache/coyote/AbstractProcessor$1.class:   compiled Java class data, version 52.0 [64-bit architecture=65593] [architecture=6382440]
output/classes/org/apache/coyote/AbstractProcessor.class:     compiled Java class data, version 52.0 [architecture=14878464] [architecture=56073]
架构在输出中意味着什么?为什么编译器从同一个文件为类生成不同的代码


为什么编译器为生成
AbstractProcessor$1.class
?源代码中没有匿名内部类。

看起来这实际上是
文件
命令中的一个bug。查看
文件
github镜像,该镜像处理检测Java类文件和Mach-O(即Mac)二进制文件(因为它们都使用相同的魔法字符串),似乎“架构”部分仅用于后者,但不知何故会应用于您的类文件

你可以忽略这一点

关于$1文件,用javap查看它表明它是一个合成类,包含一个名为
$SwitchMap$org$apache$tomcat$util$log$UserDataHelper$Mode
(原文如此)的方法,这表明它是由编译器生成的,用于帮助代码中的switch语句:

$ javap AbstractProcessor\$1.class 
Compiled from "AbstractProcessor.java"
class org.apache.coyote.AbstractProcessor$1 {
  static final int[] $SwitchMap$org$apache$tomcat$util$log$UserDataHelper$Mode;
  static {};
}

看起来这实际上是
文件
命令中的一个bug。查看
文件
github镜像,该镜像处理检测Java类文件和Mach-O(即Mac)二进制文件(因为它们都使用相同的魔法字符串),似乎“架构”部分仅用于后者,但不知何故会应用于您的类文件

你可以忽略这一点

关于$1文件,用javap查看它表明它是一个合成类,包含一个名为
$SwitchMap$org$apache$tomcat$util$log$UserDataHelper$Mode
(原文如此)的方法,这表明它是由编译器生成的,用于帮助代码中的switch语句:

$ javap AbstractProcessor\$1.class 
Compiled from "AbstractProcessor.java"
class org.apache.coyote.AbstractProcessor$1 {
  static final int[] $SwitchMap$org$apache$tomcat$util$log$UserDataHelper$Mode;
  static {};
}

带有
$
的类通常是在其他类中使用的匿名类,在您的例子中是insde
AbstractProcessor
。但这并不能解释编译器生成的代码与它们不同的原因。@Arnaud OP不是问什么是
$1
,而是问什么是
[64位体系结构=65593][architecture=6382440
[architecture=14878464][architecture=56073]
这一行的续行是(向右滚动查看),以及它们在以下情况下不同的原因(推测)类文件是由同一个编译器同时生成的。是的,没错。谢谢@Amadan@brookhong:内核版本在这里不相关,
file-version
显示了什么,因为
file
版本在这里可能是相关的。带有
$
的类通常是在其他类中使用的匿名类,insde
AbstractProcessor
。但这并不能解释为什么编译器生成的代码与它们不同。@Arnaud OP不是问
$1
是什么,而是问行的续行中的
[64位体系结构=65593][architecture=6382440]
[architecture=14878464][architecture=56073]
是什么(向右滚动查看它们),以及它们在什么时候不同(大概)类文件是由同一个编译器同时生成的。是的,没错。谢谢@Amadan@brookhong:内核版本在这里不相关,
file-version
显示了什么,因为
file
版本在这里可能是相关的。我不是
file
专家,但有一种可能是通过提交解决了这一问题颂歌>https://github.com/file/file/commit/724e39ee1a2d7020bc0c39210d0050e0f69ac3c6#diff-51eee6a2312f3e0ba5f695708b2f9eff首先包含在文件-5.23中。我不是
文件
专家,但修复此问题的提交可能是
https://github.com/file/file/commit/724e39ee1a2d7020bc0c39210d0050e0f69ac3c6#diff-51eee6a2312f3e0ba5f695708b2f9eff
首次包含在文件-5.23中。