Descargo de responsabilidad: me doy cuenta de que puedo generar esto en tiempo de ejecución en Java, esto fue necesario para un caso muy especial mientras el rendimiento probaba algún código. He encontrado un enfoque diferente, así que ahora esto es más una curiosidad que cualquier cosa práctica.¿Por qué excede el límite de 65.535 bytes en los constructores de Java y los inicializadores estáticos?
He intentado lo siguiente como un campo estático, como un campo de instancia, y se inicializa directamente dentro del constructor. Cada vez que eclipse me informa que "el código del constructor TestData() excede el límite de 65535 bytes" o "el código para el inicializador estático excede el límite de 65535 bytes".
Hay 10.000 enteros. Si cada int es 4 bytes (32bits), ¿no serían 40,000 bytes? ¿Hay realmente más de 25,000 bytes de sobrecarga, además de los datos simplemente construyendo la matriz?
Los datos son generados con este pequeño fragmento de pitón:
#!/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 "};";
He aquí una pequeña muestra:
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
Al leer esto, encuentro que este límite se aplica a todos los métodos (incluidos los constructores), así como a los inicializadores estáticos. ¡Interesante! –
http://groups.google.com/group/comp.lang.java.machine/browse_thread/thread/b0cf268515f1ef55 –