Great, I thought so too just waited for a other opinions and almost forgot about it! Created https://issues.apache.org/jira/browse/LUCENE-3746 Doron
On Thu, Feb 2, 2012 at 6:08 PM, Dawid Weiss <dawid.we...@cs.put.poznan.pl>wrote: > long freeHeap = Runtime.getRuntime().freeMemory(); > > Indeed, this doesn't look right; it'd have to be used in combination > with (maxMemory - totalMemory) because that's how much the heap can > grow? The problem is none of this is atomic, so the result can > unpredictable. There are other methods in management interface that > permit a somewhat more detailed checks. Don't know if they guarantee > atomicity of the returned snapshot, but I doubt it. > > > http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/management/MemoryMXBean.html#getHeapMemoryUsage() > > http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/management/MemoryPoolMXBean.html#getPeakUsage() > > Dawid > > On Thu, Feb 2, 2012 at 4:58 PM, Robert Muir <rcm...@gmail.com> wrote: > > Doron, this sounds like something we should fix: I think we should > > open a JIRA issue for it. > > > > On Mon, Jan 30, 2012 at 12:34 PM, Doron Cohen <cdor...@gmail.com> wrote: > >> Hi, this test consistently fails on Windows with an IBM JDK, with this > >> error: > >> > >>> java.lang.IllegalArgumentException: At least 0.5MB RAM buffer is > needed: > >>> 432472 > >>> at org.apache.lucene.search.suggest.fst.Sort.<init>(Sort.java:159) > >>> at org.apache.lucene.search.suggest.fst.Sort.<init>(Sort.java:150) > >>> at > >>> > org.apache.lucene.search.suggest.fst.FSTCompletionLookup.build(FSTCompletionLookup.java:181) > >>> at > >>> > org.apache.lucene.search.suggest.fst.FSTCompletionTest.testLargeInputConstantWeights(FSTCompletionTest.java:164) > >>> > >>> NOTE: reproduce with: ant test -Dtestcase=FSTCompletionTest > >>> -Dtestmethod=testLargeInputConstantWeights > >>> > -Dtests.seed=63069fe8e90d25f1:-4459dd4f7ddf2b26:71f954eeb3888217 -Dargs="-> > >>> Dfile.encoding=UTF-8" > >>> NOTE: test params are: locale=et_EE, > timezone=America/Argentina/La_Rioja > >>> NOTE: all tests run in this JVM: > >>> [FSTCompletionTest] > >>> NOTE: Windows 7 6.1 build 7601 Service Pack 1 amd64/IBM Corporation > 1.6.0 > >>> (64-bit)/cpus=2,threads=4,free=330928,total=6291456 > >> > >> The memory provided to sort is computed in > >> contrib/spell/.../suggest.fst.Sort.automatic(): > >> > >> {code} > >> public static BufferSize automatic() { > >> long freeHeap = Runtime.getRuntime().freeMemory(); > >> return new BufferSize(Math.min(MIN_BUFFER_SIZE_MB * MB, freeHeap / > >> 2)); > >> } > >> {code} > >> > >> With Oracle's Java 6 the test passed. > >> > >> With IBM JDK, the fails even with -Xmx700m. (Allow allocating at most > >> 177M.) > >> But It will pass with just -Xms10m. (Allow allocating 10M at start.) > >> > >> So, if in a certain moment in a JVM's life the currently allocated > memory is > >> almost exhausted, Sort will fail, even if the settings in effect allow > to > >> allocate more heap. > >> > >> It seems "nice" that Sort attempts to behave "nice" - use as much as > half of > >> the currently free heap. > >> This makes sense. > >> But perhaps in the situation that there's not enough free memory but > the max > >> memory settings allow to allocate more, a reasonable minimum should be > >> returned, even the minimum of 0.5M. This will cause additional memory > >> allocation for heap, but I think in this case it is justified? > >> > >> Doron > > > > > > > > -- > > lucidimagination.com > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org > > For additional commands, e-mail: dev-h...@lucene.apache.org > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org > For additional commands, e-mail: dev-h...@lucene.apache.org > >