繁体   English   中英

如何知道Java类是由JDK 64位或32位版本编译的?

[英]How to know a java class is compiled by jdk 64bit or 32bit version?

给定一个Java类文件,我们可以使用hexdump或od来了解其jdk版本,但是我们可以知道给定Java类文件的64位或32位信息吗?

我想知道java类文件是否具有该字段,例如version字段?

如果字节码与字长无关,那么当您对类文件进行od时,它就像:

0000000 feca beba 0000 3100 6300 0009 0019 0946 0000020 1900 4700 0009 0019 0948 1900 4900 0009 0000040 0019 094a 1900 4b00 000a 001a 074c 4d00

第一行约为2 * 8字节,为什么第二行地址为0000020?

但是我们能知道给定Java类文件的64位或32位信息吗?

不,你不能说。

  • Java字节码与单词大小无关。 可以加载相同的.class文件并在32位或64位JVM上运行。 1上编译它们的平台都没有关系。
  • javap输出中没有任何内容可以告诉您使用了什么Java编译器。 (您可以从类文件版本中了解Java主版本,但这不是确定的,这不是我们在说的...)
  • JVM规范没有定义任何标准“属性”来编码Java编译器版本,也没有定义它是在32位或64位JVM上运行。
  • 我在使用UNIX / Linux实用程序(例如stringsod.class文件中找不到编译器版本字符串的任何痕迹。

跟进:

为什么第二行地址是0000020?

以八进制表示。 有关详细信息,请参阅man 1 od (从历史上看, od是“八进制转储”的收缩。)


1-忽略类文件版本问题...

Java .class文件与平台无关。 特别是,同一类文件可以在32位和64位体系结构上执行。 因此,在类文件中没有不必要的字段。

类文件的字节代码是特殊的VM字节代码,与基础体系结构无关。 因此,您无需确定此信息。 您可以使用64位JDK编译Java程序,然后在JRE_32位上运行它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM