[
https://issues.apache.org/jira/browse/LUCENE-5086?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13700513#comment-13700513
]
Uwe Schindler edited comment on LUCENE-5086 at 7/5/13 8:17 AM:
---------------------------------------------------------------
Some restructuring and preventing a useless NPE that needs to be catched on
non-Hotspot JVMs.
I also removed the separate private method and made the whole thing with nested
catches like at the other places in the static {} initializer (I don't like
class' methods called from a static initializer). Also this one is easier to
debug, as you can add printlns without working around the "return" escape of
the original method!
I tested on Windows:
- Oracle JDK 6u32 and 6u45 (64 bit) work, proprietary sunMF API used
- Oracle JDK 6u32, 32 bit is unsupported as before (the object alignment JVM
option does not exist at all, but also the sunMF API is used)
- Oracle JDK 7u25 and Oracle JDK 8 preview (64 bit) works, new public Java 7
API is used (via reflection) or statically typed in trunk
- All other JVMs are unsupported, but they don't have obejct alignment available
By the way: Our code looks better and more universal, because it does not rely
on the management bean to detect compressed oops. We "measure" them! So it also
works with J9!
was (Author: thetaphi):
Some restructuring and preventing a useless NPE that needs to be catched on
non-Hotspot JVMs.
I also removed the separate private method and made the whole thing with nested
catches like at the other places in the static {} initializer (I don't like
class' methods called from a static initializer). Also this one is easier to
debug, as you can add printlns without working around the "return" escape of
the original method!
I tested on Windows:
- Oracle JDK 6u32 and 6u45 (64 bit) work, proprietary sunMF API used
- Oracle JDK 6u32, 32 bit is unsupported as before (the object alignment JVM
option does not exist at all, but also the sunMF API is used)
- Oracle JDK 7u25 (64 bit) works, new public Java 7 API is used (via
reflection) or statically typed in trunk
- All other JVMs are unsupported, but they don't have obejct alignment available
By the way: Our code looks better and more universal, because it does not rely
on the management bean to detect compressed oops. We "measure" them! So it also
works with J9!
> RamUsageEstimator causes AWT classes to be loaded by calling
> ManagementFactory#getPlatformMBeanServer
> -----------------------------------------------------------------------------------------------------
>
> Key: LUCENE-5086
> URL: https://issues.apache.org/jira/browse/LUCENE-5086
> Project: Lucene - Core
> Issue Type: Improvement
> Reporter: Shay Banon
> Assignee: Dawid Weiss
> Attachments: LUCENE-5086-branch4x.patch, LUCENE-5086-branch4x.patch,
> LUCENE-5086.patch, LUCENE-5086-trunk.patch, LUCENE-5086-trunk.patch
>
>
> Yea, that type of day and that type of title :).
> Since the last update of Java 6 on OS X, I started to see an annoying icon
> pop up at the doc whenever running elasticsearch. By default, all of our
> scripts add headless AWT flag so people will probably not encounter it, but,
> it was strange that I saw it when before I didn't.
> I started to dig around, and saw that when RamUsageEstimator was being
> loaded, it was causing AWT classes to be loaded. Further investigation showed
> that actually for some reason, calling
> ManagementFactory#getPlatformMBeanServer now with the new Java version causes
> AWT classes to be loaded (at least on the mac, haven't tested on other
> platforms yet).
> There are several ways to try and solve it, for example, by identifying the
> bug in the JVM itself, but I think that there should be a fix for it in
> Lucene itself, specifically since there is no need to call
> #getPlatformMBeanServer to get the hotspot diagnostics one (its a heavy
> call...).
> Here is a simple call that will allow to get the hotspot mxbean without using
> the #getPlatformMBeanServer method, and not causing it to be loaded and
> loading all those nasty AWT classes:
> {code}
> Object getHotSpotMXBean() {
> try {
> // Java 6
> Class sunMF = Class.forName("sun.management.ManagementFactory");
> return sunMF.getMethod("getDiagnosticMXBean").invoke(null);
> } catch (Throwable t) {
> // ignore
> }
> // potentially Java 7
> try {
> return ManagementFactory.class.getMethod("getPlatformMXBean",
> Class.class).invoke(null,
> Class.forName("com.sun.management.HotSpotDiagnosticMXBean"));
> } catch (Throwable t) {
> // ignore
> }
> return null;
> }
> {code}
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]