Tuyên bố từ chối trách nhiệm: Tôi nhận ra rằng tôi có thể tạo điều này khi chạy trong Java, điều này là cần thiết cho một trường hợp rất đặc biệt trong khi kiểm tra hiệu suất một số mã. Tôi đã tìm thấy một cách tiếp cận khác, vì vậy bây giờ đây chỉ là một sự tò mò hơn bất cứ điều gì thực tế.Tại sao điều này vượt quá giới hạn 65.535 byte trong các nhà xây dựng Java và Trình khởi tạo tĩnh?
Tôi đã thử các trường sau đây dưới dạng trường tĩnh, dưới dạng trường mẫu và được khởi tạo trực tiếp trong hàm tạo. Mỗi lần nhật thực thông báo cho tôi rằng "Mã của hàm tạo TestData() vượt quá giới hạn 65535 byte" hoặc "Mã cho trình khởi chạy tĩnh vượt quá giới hạn 65535 byte".
Có 10.000 số nguyên. Nếu mỗi int là 4 byte (32bits), thì đó sẽ không phải là 40.000 byte? Có thực sự nhiều hơn rằng 25,0000 byte của chi phí ngoài các dữ liệu chỉ đơn thuần là xây dựng mảng?
Dữ liệu được tạo ra với chút nhỏ này python:
#!/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 "};";
Dưới đây là một ví dụ nhỏ:
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
Khi đọc về điều này, tôi thấy rằng giới hạn này áp dụng cho tất cả các phương pháp (bao gồm các hàm tạo) cũng như các trình khởi tạo tĩnh. Hấp dẫn! –
http://groups.google.com/group/comp.lang.java.machine/browse_thread/thread/b0cf268515f1ef55 –