Root specialized object classloader at JRuby classloader#8433
Merged
headius merged 3 commits intojruby:masterfrom Nov 20, 2024
Merged
Root specialized object classloader at JRuby classloader#8433headius merged 3 commits intojruby:masterfrom
headius merged 3 commits intojruby:masterfrom
Conversation
The classes generated here need to be visible to other classes loaded and generated by JRuby, such as Ruby classes that implement Java interfaces. If the specialized class and a Java interface to implement come from different classloader hierarchies, the JVM classloading subsystem will be unable to resolve the impl class. The fix here makes the RubyObjectSpecializer per-runtime, so the specialized classes live within the standard JRubyClassLoader hierarchy, visible to other classes loaded and generated by Ruby code at runtime. An additional fix will pre-generate the first 50 specialized object classes, which will also fix the same issue (they will load into the same classloader as JRuby itself) and avoid re-generating these classes for each runtime instance. Fixes jruby#8412.
This patch generates all the specialized widths of RubyObject that we support, up to the configured maximum. This avoids racing to to generate these classes and potentially speeds up early boot stages.
This was referenced Nov 18, 2024
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The classes generated here need to be visible to other classes loaded and generated by JRuby, such as Ruby classes that implement Java interfaces. If the specialized class and a Java interface to implement come from different classloader hierarchies, the JVM classloading subsystem will be unable to resolve the impl class.
The fix here makes the RubyObjectSpecializer per-runtime, so the specialized classes live within the standard JRubyClassLoader hierarchy, visible to other classes loaded and generated by Ruby code at runtime.
An additional fix will pre-generate the first 50 specialized object classes, which will also fix the same issue (they will load into the same classloader as JRuby itself) and avoid re-generating these classes for each runtime instance.
Fixes #8412.