You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by us...@apache.org on 2013/07/05 10:31:42 UTC
svn commit: r1499936 - in /lucene/dev/branches/branch_4x: ./ lucene/
lucene/CHANGES.txt lucene/core/
lucene/core/src/java/org/apache/lucene/util/RamUsageEstimator.java
Author: uschindler
Date: Fri Jul 5 08:31:41 2013
New Revision: 1499936
URL: http://svn.apache.org/r1499936
Log:
Merged revision(s) 1499935 from lucene/dev/trunk:
LUCENE-5086: RamUsageEstimator now uses official Java 7 API or a proprietary Oracle Java 6 API to get Hotspot MX bean, preventing AWT classes to be loaded on MacOSX
Modified:
lucene/dev/branches/branch_4x/ (props changed)
lucene/dev/branches/branch_4x/lucene/ (props changed)
lucene/dev/branches/branch_4x/lucene/CHANGES.txt
lucene/dev/branches/branch_4x/lucene/core/ (props changed)
lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/util/RamUsageEstimator.java
Modified: lucene/dev/branches/branch_4x/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/CHANGES.txt?rev=1499936&r1=1499935&r2=1499936&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/CHANGES.txt (original)
+++ lucene/dev/branches/branch_4x/lucene/CHANGES.txt Fri Jul 5 08:31:41 2013
@@ -180,6 +180,10 @@ Optimizations
* LUCENE-5050: Close the stored fields and term vectors index files as soon as
the index has been loaded into memory to save file descriptors. (Adrien Grand)
+* LUCENE-5086: RamUsageEstimator now uses official Java 7 API or a proprietary
+ Oracle Java 6 API to get Hotspot MX bean, preventing AWT classes to be
+ loaded on MacOSX. (Shay Banon, Dawid Weiss, Uwe Schindler)
+
New Features
* LUCENE-5085: MorfologikFilter will no longer stem words marked as keywords
Modified: lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/util/RamUsageEstimator.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/util/RamUsageEstimator.java?rev=1499936&r1=1499935&r2=1499936&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/util/RamUsageEstimator.java (original)
+++ lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/util/RamUsageEstimator.java Fri Jul 5 08:31:41 2013
@@ -213,17 +213,34 @@ public final class RamUsageEstimator {
int objectAlignment = 8;
try {
final Class<?> beanClazz = Class.forName("com.sun.management.HotSpotDiagnosticMXBean");
- final Object hotSpotBean = ManagementFactory.newPlatformMXBeanProxy(
- ManagementFactory.getPlatformMBeanServer(),
- "com.sun.management:type=HotSpotDiagnostic",
- beanClazz
- );
- final Method getVMOptionMethod = beanClazz.getMethod("getVMOption", String.class);
- final Object vmOption = getVMOptionMethod.invoke(hotSpotBean, "ObjectAlignmentInBytes");
- objectAlignment = Integer.parseInt(
- vmOption.getClass().getMethod("getValue").invoke(vmOption).toString()
- );
- supportedFeatures.add(JvmFeature.OBJECT_ALIGNMENT);
+ // Try to get the diagnostic mxbean without calling {@link ManagementFactory#getPlatformMBeanServer()}
+ // which starts AWT thread (and shows junk in the dock) on a Mac:
+ Object hotSpotBean;
+ // Java 7+, HotSpot
+ try {
+ hotSpotBean = ManagementFactory.class
+ .getMethod("getPlatformMXBean", Class.class)
+ .invoke(null, beanClazz);
+ } catch (Exception e1) {
+ // Java 6, HotSpot
+ try {
+ Class<?> sunMF = Class.forName("sun.management.ManagementFactory");
+ hotSpotBean = sunMF.getMethod("getDiagnosticMXBean").invoke(null);
+ } catch (Exception e2) {
+ // Last resort option is an attempt to get it from ManagementFactory's server anyway (may start AWT).
+ hotSpotBean = ManagementFactory.newPlatformMXBeanProxy(
+ ManagementFactory.getPlatformMBeanServer(),
+ "com.sun.management:type=HotSpotDiagnostic", beanClazz);
+ }
+ }
+ if (hotSpotBean != null) {
+ final Method getVMOptionMethod = beanClazz.getMethod("getVMOption", String.class);
+ final Object vmOption = getVMOptionMethod.invoke(hotSpotBean, "ObjectAlignmentInBytes");
+ objectAlignment = Integer.parseInt(
+ vmOption.getClass().getMethod("getValue").invoke(vmOption).toString()
+ );
+ supportedFeatures.add(JvmFeature.OBJECT_ALIGNMENT);
+ }
} catch (Exception e) {
// Ignore.
}