জেএলএস অনুসারে, int
শুরুর ঠিক পরে একটি অ্যারে জিরো দ্বারা পূরণ করা উচিত। যাইহোক, আমি এমন পরিস্থিতির মুখোমুখি হয়েছি যেখানে এটি নেই। এই জাতীয় আচরণটি প্রথমে জেডিকে 7u4 এ ঘটে এবং পরবর্তী সমস্ত আপডেটেও ঘটে (আমি 64-বিট বাস্তবায়ন ব্যবহার করি)। নিম্নলিখিত কোড ব্যতিক্রম ছুঁড়েছে:
public static void main(String[] args) {
int[] a;
int n = 0;
for (int i = 0; i < 100000000; ++i) {
a = new int[10];
for (int f : a)
if (f != 0)
throw new RuntimeException("Array just after allocation: "+ Arrays.toString(a));
Arrays.fill(a, 0);
for (int j = 0; j < a.length; ++j)
a[j] = (n - j)*i;
for (int f : a)
n += f;
}
System.out.println(n);
}
JVM কোড ব্লকের সংকলন সম্পাদন করে এবং -Xint
পতাকা নিয়ে উত্থাপিত না হওয়ার পরে ব্যতিক্রম ঘটে । অতিরিক্তভাবে, Arrays.fill(...)
বিবৃতিটি (এই কোডের অন্যান্য বিবৃতি হিসাবে) প্রয়োজনীয়, এবং এটি অনুপস্থিত থাকলে ব্যতিক্রম ঘটে না। এটি পরিষ্কার যে এই সম্ভাব্য বাগটি কিছু জেভিএম অপ্টিমাইজেশানের সাথে আবদ্ধ। এই জাতীয় আচরণের কারণে কোনও ধারণা?
হালনাগাদ:
আমি হটস্পট 64৪-বিট সার্ভার ভিএম, জাভা সংস্করণটি 1.7.0_04 থেকে জেন্টু লিনাক্স, দেবিয়ান লিনাক্স (উভয় কার্নেল 3.0 সংস্করণ) এবং ম্যাকোস লায়নতে জাভা সংস্করণটিতে দেখছি see এই ত্রুটিটি সর্বদা উপরের কোড সহ পুনরুত্পাদন করা যেতে পারে। আমি 32-বিট জেডিকে বা উইন্ডোজে এই সমস্যাটি পরীক্ষা করিনি। আমি ইতিমধ্যে ওরাকলকে একটি বাগ প্রতিবেদন পাঠিয়েছি (বাগ আইডি 7196857) এবং এটি কয়েক দিনের মধ্যে পাবলিক ওরাকল বাগ ডাটাবেসে উপস্থিত হবে।
আপডেট:
ওরাকল এই ত্রুটিটি তাদের সর্বজনীন বাগ ডাটাবেসে প্রকাশ করেছে: http://bugs.sun.com/bugdatedia/view_bug.do?bug_id=7196857