[英]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位信息吗?
不,你不能说。
.class
文件并在32位或64位JVM上运行。 在1上编译它们的平台都没有关系。 javap
输出中没有任何内容可以告诉您使用了什么Java编译器。 (您可以从类文件版本中了解Java主版本,但这不是确定的,这不是我们在说的...) strings
或od
的.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.