small medium large xlarge

The latest version of the book is P1.0, released over 4 years ago. If you've bought a PDF of the book and would like to update it to this version (for free), visit your home page.

By default this page displays the errata for the latest version of the book. If you have a previous version, select it here:

If you've found a new error, please submit it.

  • Typo
  • Tech. error
  • Suggestion
  • Maybe next edition
  • Not a problem
  • Reported in: P1.0 (20-Nov-16)
Paper page: 14
On printed page 14, in file chp2/wrapper.rb there are two invocations to GC.start as follows: GC.start GC.start(full_mark: true, immediate_sweep: ...more...
  • Reported in: P1.0 (15-Feb-16)
Paper page: 15
"Let's use the wrapper to run our unoptimized code example from the previous chapter" but then the sample code has nothing to do with the mentioned ex...more...
  • Reported in: P1.0 (07-Mar-17)
PDF page: 17
If you want to modify an array in place, you need only to modify each of its elements in place. data.each{|str|str.upcase!} When bench-marked,...more...
  • Reported in: P1.0 (12-Feb-16)
PDF page: 41-42
Command passes gc: :disable, but results show"gc":"enable" with a gc_count: 1. If GC is disabled, gc_count should be 0. =============== 2.2.0 :00...more...
  • Reported in: P1.0 (17-Dec-15)
PDF page: 54
The link to KCachegrind in the footnote seems to be to an old page. Since I can't include links in errata, all I can say is that the old page has a l...more...
  • Reported in: P1.0 (20-Dec-15)
PDF page: 55
Using ruby-prof version 0.15.9 (on Ruby 2.2.4p230), in order to get the final line of chp4/ruby_prof_example_api1.rb printing the result of the FlatPr...more...
  • Reported in: P1.0 (20-Jan-16)
PDF page: 55
ruby: 2.3.0 ruby-prof: 0.15.9 This line `printer.print("ruby_prof_example_api1_profile.txt", "w+"))` I needed to change it to: `Fi...more...
  • Reported in: P1.0 (20-Dec-15)
PDF page: 71
Call Graph rendering didn't work for me out of the box using QCacheGrind on Mac OSX, so I would suggest adding in some extra installation instructions...more...
  • Reported in: P1.0 (21-Dec-15)
PDF page: 74

class AppTest < MiniTest::Unit::TestCase

is now

class AppTest < MiniTest::Test

in Minitest 5.8.--Paul Fioravanti

  • Reported in: P1.0 (25-Jul-16)
Paper page: 80
The description of chp5/app_optimized3.rb is incorrect/misleading in that it includes Regexp#initialize calls. However, the Regexp's do not include a...more...
  • Reported in: P1.0 (29-Dec-19)
Paper page: 88-89
In the sentence "For example, how do we know that heap_page_allocate represents Ruby object creation?", "heap_page_allocate" should be replaced by "he...more...
  • Reported in: P1.0 (06-May-16)
Paper page: 102
Page 101 lists GC Time(ms) as 0.755 in the GC profiler report, but page 102 says "the single collection pass took almost 800 ms", which is 1000 times ...more...
  • Reported in: P1.0 (25-Jul-16)
Paper page: 106
For the trick that works on Linux to clear the filesystem cache, use just echo instead of sudo echo. If you require passwords for sudo and don't supp...more...
  • Reported in: P1.0 (17-May-16)
PDF page: 116
Missing word between "to" and "the performance" in this fragment: "Should the test find a slowdown, we want to the performance before and after, an...more...
  • Reported in: P1.0 (20-Nov-16)
Paper page: 117
It seems somewhat strange that the methods which are meant to help readers establish their own peformance testing/benchmarking routines (specifically ...more...
  • Reported in: P1.0 (27-Jul-16)
Paper page: 160
When describing memsizes of objects, the book says that the extra byte for strings that can't be stored in the ruby object is for "upkeep". That is i...more...
  • Reported in: P1.0 (20-Mar-16)
Paper page: 161

Small typo. Instead of "Now that you how Ruby allocates, ..." should be "Now that you know how Ruby allocates..."--Steve Jemens