簡體   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