Disclaimer: Mi rendo conto che è possibile generare questo in fase di esecuzione in Java, questo era necessario per un caso molto particolare mentre le prestazioni testavano un po 'di codice. Ho trovato un approccio diverso, quindi ora questa è solo una curiosità più che pratica.Perché supera il limite di 65.535 byte nei costruttori Java e negli inizializzatori statici?
Ho provato quanto segue come campo statico, come campo di istanza, e inizializzato direttamente all'interno del costruttore. Ogni volta che eclipse mi informa che "Il codice del costruttore TestData() sta superando il limite di 65535 byte" o "Il codice per l'inizializzatore statico supera il limite di 65535 byte".
Ci sono 10.000 numeri interi. Se ogni int è 4 byte (32 bit), quindi non sarebbe 40.000 byte? C'è davvero più di 25,0000 byte di overhead in aggiunta ai dati semplicemente costruendo la matrice?
I dati viene generato con questo piccolo pezzo di pitone:
#!/usr/bin/python
import random;
print "public final int[] RANDOM_INTEGERS = new int[] {";
for i in range(1,10000):
print str(int(random.uniform(0,0x7fffffff))) + ",";
print "};";
Ecco un piccolo esempio:
public final int[] RANDOM_INTEGERS = new int[] {
963056418, 460816633, 1426956928, 1836901854, 334443802, 721185237, 488810483,
1734703787, 1858674527, 112552804, 1467830977, 1533524842, 1140643114, 1452361499,
716999590, 652029167, 1448309605, 1111915190, 1032718128, 1194366355, 112834025,
419247979, 944166634, 205228045, 1920916263, 1102820742, 1504720637, 757008315,
67604636, 1686232265, 597601176, 1090143513, 205960256, 1611222388, 1997832237,
1429883982, 1693885243, 1987916675, 159802771, 1092244159, 1224816153, 1675311441,
1873372604, 1787757434, 1347615328, 1868311855, 1401477617, 508641277, 1352501377,
1442984254, 1468392589, 1059757519, 1898445041, 1368044543, 513517087, 99625132,
1291863875, 654253390, 169170318, 2117466849, 1711924068, 564675178, 208741732,
1095240821, 1993892374, 87422510, 1651783681, 1536657700, 1039420228, 674134447,
1083424612, 2137469237, 1294104182, 964677542, 1506442822, 1521039575, 64073383,
929517073, 206993014, 466196357, 1139633501, 1692533218, 1934476545, 2066226407,
550646675, 624977767, 1494512072, 1230119126, 1956454185, 1321128794, 2099617717,
//.... to 10,0000 instances
Nella lettura di questo, trovo che questo limite si applica a tutti i metodi (compresi i costruttori) e agli inizializzatori statici. Interessante! –
http://groups.google.com/group/comp.lang.java.machine/browse_thread/thread/b0cf268515f1ef55 –