所以我有一個行的代碼在我的文件,讀取當我將int數組更改爲char數組時,爲什麼我的.class文件更大?
char[] arr = new char[256];
然而,當我將其更改爲
int[] arr = new int[256];
類文件收縮了0.01 KB。爲什麼是這樣?
所以我有一個行的代碼在我的文件,讀取當我將int數組更改爲char數組時,爲什麼我的.class文件更大?
char[] arr = new char[256];
然而,當我將其更改爲
int[] arr = new int[256];
類文件收縮了0.01 KB。爲什麼是這樣?
可能只是因爲該類型的符號稍微短了點。
你會這樣想,但如果我將「char」改爲「short」,它的尺寸也會縮小。 – user1522860
@ user1522860 - 出於同樣的原因。如果您確實需要/需要理解,您將需要手動解碼類文件...使用JVM規範中指定的類文件格式。但是,答案是沒有意義的...所以不要指望人們浪費時間爲你做。 –
它可能是因爲編譯器生成一個短几個字符的符號。就像在.java
文件中,第一行將創建一個更大的文件,因爲它有更多的字符。
如果你在vim中打開.class
,你將會看到下面的int
數組。
Êþº¾^@^@^@2^@^O
^@^C^@^L^G^@^M^G^@^N^A^@^F<init>^A^@^C()V^A^@^DCode^A^@^OLineNumberTable^A^@^Dmain^A^@^V([Ljava/lang/String;)V^A^@
SourceFile^A^@!JFileChooserDisableDirectory.java^L^@^D^@^E^A^@^\JFileChooserDisableDirectory^A^@^Pjava/lang/Object^@!^@^B^@^C^@^@^@^@^@^B^@^A^@^D^@^E^@^A^@^F^@^@^@^]^@^A^@^A^@^@^@^E*·^@^A±^@^@^@^A^@^G^@^@^@^F^@^A^@^@^@^A^@ ^@^H^@ ^@^A^@^F^@^@^@"^@^A^@^B^@^@^@^F^P
¼
L±^@^@^@^A^@^G^@^@^@
^@^B^@^@^@^D^@^E^@^E^@^A^@
^@^@^@^B^@^K
這裏是char
陣列.class
文件。
Êþº¾^@^@^@2^@^O
^@^C^@^L^G^@^M^G^@^N^A^@^F<init>^A^@^C()V^A^@^DCode^A^@^OLineNumberTable^A^@^Dmain^A^@^V([Ljava/lang/String;)V^A^@
SourceFile^A^@!JFileChooserDisableDirectory.java^L^@^D^@^E^A^@^\JFileChooserDisableDirectory^A^@^Pjava/lang/Object^@!^@^B^@^C^@^@^@^@^@^B^@^A^@^D^@^E^@^A^@^F^@^@^@^]^@^A^@^A^@^@^@^E*·^@^A±^@^@^@^A^@^G^@^@^@^F^@^A^@^@^@^A^@ ^@^H^@ ^@^A^@^F^@^@^@"^@^A^@^B^@^@^@^F^P
¼^EL±^@^@^@^A^@^G^@^@^@
^@^B^@^@^@^D^@^E^@^E^@^A^@
^@^@^@^B^@^K
使用TextDiff你可以看到在代碼中的差異。
有趣!爲了內存保護的目的,它仍然值得使用char數組而不是int數組嗎?直覺會說是,但我不確定了。 – user1522860
如果你想節省內存,你可能需要一個'short []'或'byte []'。 Java字符是2字節無符號整數,這可能不是你想要的。 – user2357112
它不會有明顯的區別。即使你有一百萬個陣列,它仍然只有一個MB左右。 – 2013-08-04 06:02:01
爲什麼不在文件中做'diff'('FC/B')來看看有什麼不同? – Gabe