# HG changeset patch # User Jan Lahoda # Date 1244564445 -7200 # Node ID 6912c1b3475d9f3073be6b2c5066c6cff4999cde # Parent 362d4a0687107e69a07ce465fa3a16b5f9edd2b5 #158421: the IDE needs support for memory usage threshold - adding check to ensure the VM supports it. (backported from trunk, changesets cea8c226c1d5 and 6063da7c17b1). diff --git a/parsing.api/src/org/netbeans/modules/parsing/impl/Bundle.properties b/parsing.api/src/org/netbeans/modules/parsing/impl/Bundle.properties --- a/parsing.api/src/org/netbeans/modules/parsing/impl/Bundle.properties +++ b/parsing.api/src/org/netbeans/modules/parsing/impl/Bundle.properties @@ -42,3 +42,5 @@ OpenIDE-Module-Short-Description=Parsing API OpenIDE-Module-Long-Description=Parsing API +ERR_NoUsageThreshold=The JVM does not support memory usage threshold, which is needed for the IDE. For more details, see: \ +http://wiki.netbeans.org/NoMemoryUsageThreshold diff --git a/parsing.api/src/org/netbeans/modules/parsing/impl/Installer.java b/parsing.api/src/org/netbeans/modules/parsing/impl/Installer.java --- a/parsing.api/src/org/netbeans/modules/parsing/impl/Installer.java +++ b/parsing.api/src/org/netbeans/modules/parsing/impl/Installer.java @@ -4,8 +4,16 @@ */ package org.netbeans.modules.parsing.impl; +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryPoolMXBean; +import java.lang.management.MemoryType; +import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; import org.netbeans.modules.parsing.impl.indexing.RepositoryUpdater; import org.openide.modules.ModuleInstall; +import org.openide.util.Exceptions; +import org.openide.util.NbBundle; import org.openide.util.RequestProcessor; import org.openide.windows.WindowManager; @@ -37,4 +45,31 @@ RepositoryUpdater.getDefault().stop(); return ret; } + + @Override + public void validate() throws IllegalStateException { + super.validate(); + + long s = System.currentTimeMillis(); + try { + List pools = null; + pools = ManagementFactory.getMemoryPoolMXBeans(); + for (MemoryPoolMXBean pool : pools) { + if (pool.getType() == MemoryType.HEAP && pool.isUsageThresholdSupported()) { //NOI18N + return ; + } + } + + IllegalStateException e = new IllegalStateException("Cannot listen on usage threshold"); + + throw Exceptions.attachLocalizedMessage(e, NbBundle.getMessage(Installer.class, "ERR_NoUsageThreshold")); + } finally { + Logger log = Logger.getLogger(Installer.class.getName()); + + if (log.isLoggable(Level.FINE)) { + log.log(Level.FINE, "threshold supported check took: {0}", System.currentTimeMillis() - s); + } + } + } + }