Java Performance Tuning By Jack Shirazi Following are the changes made in the 1/01 reprint. Here's the key to the markup: [page-number]: serious technical mistake {page-number}: minor technical mistake : important language/formatting problem (page-number): language change or minor formatting problem ?page-number?: reader question or request for clarification {109} Lines 3&4 used to read: clears them. Basically, the garbage collector does not clear WeakReference objects until all SoftReferences have been cleared. PhantomReferences They now read: clears them. Basically, the garbage collector does not clear SoftReference objects until all WeakReferences have been cleared. PhantomReferences Lines 8&9 used to read: to be used for caches that may need to have memory automatically freed, and WeakReferences are intended for canonical tables that may need to have They now read: to be used for canonical tables that may need to have memory automatically freed, and WeakReferences are intended for caches that may need to have [117] Line 12 used to read: int[][] array2 = (int[])Ref_array2.clone();//faster than initializing It now reads: int[][] array2 = (int[][])Ref_array2.clone();//faster than initializing [137] The originally published double to string conversion algorithm scaled values by one order of magnitude too much, resulting in some numbers overflowing and so converting incorrectly. This has also been corrected in the associated source and byte-code files. Lines 11 to 14 from the bottom of the page used to read: i = (long) (d*1E19 / d_magnitudes[magnitude + 324]); else i = (long) (d / d_magnitudes[magnitude + 323 - 18]); i = i%100 >= 50 ? (i/100) + 1 : i/100; They now read: i = (long) (d*1E18 / d_magnitudes[magnitude + 324]); else i = (long) (d / d_magnitudes[magnitude + 323 - 17]); i = i%10 >= 5 ? i/10 + 1 : i/10; And on p. 136, lines 6-8 from the bottom used to read (3 lines): if (i != 0) s.append(charForDigit[(int) i]); decimalOffset--; They now read (nine lines): if (i != 0) s.append(charForDigit[(int) i]); else if (decimalOffset > 0) { s.append(ZEROS[decimalOffset]); //ZEROS[n] is a char array of n 0's decimalOffset = 1; } decimalOffset--;