Martin Boßlet created JRUBY-6437: ------------------------------------ Summary: IOInputStream Performance Regression Key: JRUBY-6437 URL: https://jira.codehaus.org/browse/JRUBY-6437 Project: JRuby Issue Type: Bug Components: Core Classes/Modules Affects Versions: JRuby 1.6.5, JRuby 1.7 Reporter: Martin Boßlet Attachments: certificate.cer
The following code @JRubyMethod(meta = true) public static IRubyObject test(ThreadContext ctx, IRubyObject recv, IRubyObject value) { try { Ruby rt = ctx.getRuntime(); InputStream in = new IOInputStream(value); byte[] buf = new byte[8192]; int read; ByteArrayOutputStream baos = new ByteArrayOutputStream(); while ((read = in.read(buf)) != -1) { baos.write(buf, 0, read); } return rt.newString(new ByteList(baos.toByteArray(), false)); } catch(Exception e) { throw ctx.getRuntime().newRuntimeError(e.getMessage()); } } runs noticeably slower in JRuby trunk than on JRuby 1.6.5.1. Here's my benchmarks: $ jruby -v jruby 1.7.0.dev (ruby-1.8.7-p357) (2012-01-21 0d0c764) (Java HotSpot(TM) 64-Bit Server VM 1.7.0_02) [linux-amd64-java] $ jruby --1.9 -Ilib test/scratch.rb user system total real File.new 8.331000 0.000000 8.331000 ( 8.331000) File.open 6.291000 0.000000 6.291000 ( 6.291000) File.open(..., 'rb') 6.502000 0.000000 6.502000 ( 6.502000) $ jruby -v jruby 1.6.5.1 (ruby-1.8.7-p330) (2011-12-27 1bf37c2) (Java HotSpot(TM) 64-Bit Server VM 1.7.0_02) [linux-amd64-java] $ jruby --1.9 -Ilib test/scratch.rb user system total real File.new 6.802000 0.000000 6.802000 ( 6.801000) File.open 5.253000 0.000000 5.253000 ( 5.253000) File.open(..., 'rb') 5.145000 0.000000 5.145000 ( 5.146000) where the IO object was created using File.new(File.expand_path("certificate.cer", File.dirname(__FILE__))) File.open(File.expand_path("certificate.cer", File.dirname(__FILE__))) File.open(File.expand_path("certificate.cer", File.dirname(__FILE__)), "rb") for the corresponding lines. I also attached the "certificate.cer". Due to the small size of the file, IOInputStream#read is essentially only called twice in the while loop. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://jira.codehaus.org/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira --------------------------------------------------------------------- To unsubscribe from this list, please visit: http://xircles.codehaus.org/manage_email