When JIT Compiler compiles the append_features in the
ruby\site_ruby\1.8\builtin\javasupport\proxy\interface.rb the compiled code
slows down by a factor of 10
--------------------------------------------------------------------------------------------------------------------------------------------------------------
Key: JRUBY-2680
URL: http://jira.codehaus.org/browse/JRUBY-2680
Project: JRuby
Issue Type: Bug
Affects Versions: JRuby 1.1.2, JRuby 1.1.1
Environment: Sun Solaris Sparc, Windows XP Intel
Reporter: Chase Wolfinger
Assignee: Thomas E Enebo
When executing the following code to access the JAXP xpath parser the code is
10x slower then with if the append_feature is not JITed. In this case we are
pooling Xpath objects - but the problem exists on any other objects.
This code is 10x slower when it is Jitted - specifically the append_feature
that is JITed -->
{{def xsd_element expr, doc
xpath_pool = OAM::XPathPool.instance
xpath = xpath_pool.borrow_xpath
xpath.set_namespace_context(NamespaceContext.new(doc.prefix,
doc.namespace_uri))
nodes = xpath.evaluate(expr, doc,
javax.xml.xpath.XPathConstants.const_get('NODESET'))
elems = (0...nodes.length).collect do |i|
nodes.item(i)
end
xpath_pool.return_xpath(xpath)
elems
end
}}
This is the module used in this method - note this requires Apache commons jar:
{{
module OAM
class DocumentBuilderFact
private_class_method :new
def self.instance
@@instance ||= create_new_instance
end
private
def self.create_new_instance
doc_builder_factory =
javax.xml.parsers.DocumentBuilderFactory.new_instance
doc_builder_factory.set_namespace_aware(true)
doc_builder_factory
end
end
class XPathFact
private_class_method :new
def self.instance
@@instance ||= javax.xml.xpath.XPathFactory.new_instance
end
end
class DocBuilderPool
include Singleton
def initialize
self.doc_builder_pool = ObjectPool.new(DocBuilderFactory.new)
end
def borrow_doc_builder
self.doc_builder_pool.borrow_object
end
def return_doc_builder(doc_builder)
self.doc_builder_pool.return_object(doc_builder)
end
private
attr_accessor :doc_builder_pool
class DocBuilderFactory < BasePoolableObjectFactory
def make_object
DocumentBuilderFact.instance.new_document_builder
end
alias_method :makeObject, :make_object
end
end
class ObjectPool
def initialize(factory)
self.object_pool = GenericObjectPool.new
self.object_pool.set_factory(factory)
self.object_pool.set_max_active(-1)
self.object_pool.set_max_idle(-1)
self.object_pool.set_when_exhausted_action(GenericObjectPool.const_get("WHEN_EXHAUSTED_GROW"))
end
def borrow_object
self.object_pool.borrow_object
end
def return_object(object)
self.object_pool.return_object(object)
end
private
attr_accessor :object_pool
end
class XPathPool
include Singleton
def initialize
self.xpath_pool = ObjectPool.new(XPathFactory.new)
end
def borrow_xpath
self.xpath_pool.borrow_object
end
def return_xpath(xpath)
self.xpath_pool.return_object(xpath)
end
private
attr_accessor :xpath_pool
class XPathFactory < BasePoolableObjectFactory
def make_object
XPathFact.instance.new_xpath
end
alias_method :makeObject, :make_object
end
end
}}
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://jira.codehaus.org/secure/Administrators.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