You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@lucene.apache.org by wh...@apache.org on 2006/11/16 19:13:57 UTC
svn commit: r475843 -
/lucene/java/trunk/contrib/memory/src/java/org/apache/lucene/index/memory/MemoryIndex.java
Author: whoschek
Date: Thu Nov 16 10:13:56 2006
New Revision: 475843
URL: http://svn.apache.org/viewvc?view=rev&rev=475843
Log:
better memory estimate
Modified:
lucene/java/trunk/contrib/memory/src/java/org/apache/lucene/index/memory/MemoryIndex.java
Modified: lucene/java/trunk/contrib/memory/src/java/org/apache/lucene/index/memory/MemoryIndex.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/memory/src/java/org/apache/lucene/index/memory/MemoryIndex.java?view=diff&rev=475843&r1=475842&r2=475843
==============================================================================
--- lucene/java/trunk/contrib/memory/src/java/org/apache/lucene/index/memory/MemoryIndex.java (original)
+++ lucene/java/trunk/contrib/memory/src/java/org/apache/lucene/index/memory/MemoryIndex.java Thu Nov 16 10:13:56 2006
@@ -174,6 +174,9 @@
/** Could be made configurable; See {@link Document#setBoost(float)} */
private static final float docBoost = 1.0f;
+ /** number of memory bytes a VM pointer occupies */
+ private static final int PTR = is64BitVM() ? 8 : 4;
+
private static final long serialVersionUID = 2782195016849084649L;
private static final boolean DEBUG = false;
@@ -442,8 +445,7 @@
*/
public int getMemorySize() {
// for example usage in a smart cache see nux.xom.pool.Pool
- int HEADER = 12; // object header of any java object
- int PTR = 4; // pointer on 32 bit VMs
+ int HEADER = 2*PTR; // object header of any java object
int ARR = HEADER + 4;
int STR = HEADER + 3*4 + PTR + ARR; // string
int INTARRLIST = HEADER + 4 + PTR + ARR;
@@ -475,6 +477,14 @@
return size;
}
+ private static boolean is64BitVM() {
+ int bits = Integer.getInteger("sun.arch.data.model", 0).intValue();
+ if (bits != 0) return bits == 64;
+
+ // fallback if sun.arch.data.model isn't available
+ return System.getProperty("java.vm.name").toLowerCase().indexOf("64") >= 0;
+ }
+
private int numPositions(ArrayIntList positions) {
return positions.size() / stride;
}