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

如何知道java类是由jdk 64位或32位版本编译的?,java,Java,给定一个java类文件,我们可以使用hexdump或od来了解它的jdk版本,但是我们可以知道给定一个java类文件的64位或32位信息吗 我想知道java类文件是否有类似于版本字段的字段 如果字节码与单词大小无关,那么当你创建一个类文件时,它就像: 0000000 feca beba 0000 3100 63000 0009 0019 0946 0000020 1900 4700 0009 0019 0948 1900 4900 0009 0000040 0019 094a 1900 4b0

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

我想知道java类文件是否有类似于版本字段的字段


如果字节码与单词大小无关,那么当你创建一个类文件时,它就像:

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


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

类文件的字节码是特殊的VM字节码,与底层架构无关。因此,您不需要确定此信息。您可以使用64位JDK编译java程序,并在JRE_32位上运行它。

类文件的字节码是特殊的VM字节码,与底层架构无关。因此,您不需要确定此信息。您可以使用64位JDK编译java程序,并在JRE_32位上运行它。

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

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

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

不,你说不出来

  • Java字节码是单词大小的“不可知论”。相同的
    .class
    文件可以在32位或64位JVM上加载和运行。编译它们的平台不重要1
  • javap
    输出中没有任何内容可以告诉您使用了什么java编译器。(您可以从类文件版本中直观地看到Java主版本,但这不是确定的,也不是我们要讨论的……)
  • 没有定义任何标准“属性”来编码java编译器版本,也没有定义它是在32位还是64位JVM上运行
  • 我使用UNIX/Linux实用程序(如
    strings
    od
    )在
    .class
    文件中找不到编译器版本字符串的任何跟踪
后续行动:

为什么第二行地址是0000020

它是八进制的。有关详细信息,请参阅
man 1 od
。(历史上,
od
是“八进制转储”的缩写。)


1-忽略类文件版本问题

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

不,你说不出来

  • Java字节码是单词大小的“不可知论”。相同的
    .class
    文件可以在32位或64位JVM上加载和运行。编译它们的平台不重要1
  • javap
    输出中没有任何内容可以告诉您使用了什么java编译器。(您可以从类文件版本中直观地看到Java主版本,但这不是确定的,也不是我们要讨论的……)
  • 没有定义任何标准“属性”来编码java编译器版本,也没有定义它是在32位还是64位JVM上运行
  • 我使用UNIX/Linux实用程序(如
    strings
    od
    )在
    .class
    文件中找不到编译器版本字符串的任何跟踪
后续行动:

为什么第二行地址是0000020

它是八进制的。有关详细信息,请参阅
man 1 od
。(历史上,
od
是“八进制转储”的缩写。)



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

这是重复的,我不这么认为,OP询问的是类文件,参考问题是关于运行时。另请参见字节码是否专门为架构编译,那么它如何在任何平台上运行?@KulbhushanSingh-不,不是。这个问题是关于>>编译的问题,它与我不这么认为,OP是关于类文件的问题,参考问题是关于运行时的问题。另请参见字节码是否专门为架构编译,那么它如何在任何平台上运行?@KulbhushanSingh-不,不是。这个问题是关于>>编译的问题如果字节码与字长无关,那么当你创建一个类文件时,它就像:`0000000 feca beba 0000 3100 6300 0009 0019 0946 0000020 1900 4700 0009 0019 0948 1900 4900 0009 0000040 0019 094a 1900 4B0 000a 001a 074c 4d00`第一行大约是2*8字节,为什么第二行地址是0000020?如果字节码与字长无关,那么当你创建一个类文件时,它就像:`0000000 feca beba 0000 3100 6300 0009 0019 0946 0000020 1900 4700 0009 0019 0948 1900 4900 0009 0000040 0019 094a 1900 4B0 000a 001a 074c 4d00`第一行大约是2*8字节,为什么第二行地址是0000020?你当然是对的,但问题没有暗示OP想要这些信息的真正目的。因此,这只是假设这与运行应用程序有关。例如,它也可能只是为了报告的目的。我只是想知道,如果只提供类文件,我们是否可以知道已编译的jdk 64或32信息。当然,你是对的,但问题没有暗示OP实际需要这些信息做什么。因此,这只是假设这与运行应用程序有关。例如,它也可能只是为了报告的目的,我只是想知道,如果只给出类文件,我们是否可以知道已编译的JDK64或32信息。