From: <dgr...@us...> - 2006-09-27 13:41:14
|
Revision: 10841 http://svn.sourceforge.net/jikesrvm/?rev=10841&view=rev Author: dgrove-oss Date: 2006-09-27 06:41:06 -0700 (Wed, 27 Sep 2006) Log Message: ----------- javadoc fixes Modified Paths: -------------- rvmroot/trunk/MMTk/src/org/mmtk/utility/alloc/BlockAllocator.java rvmroot/trunk/MMTk/src/org/mmtk/utility/heap/Mmapper.java rvmroot/trunk/MMTk/src/org/mmtk/utility/heap/MonotonePageResource.java Modified: rvmroot/trunk/MMTk/src/org/mmtk/utility/alloc/BlockAllocator.java =================================================================== --- rvmroot/trunk/MMTk/src/org/mmtk/utility/alloc/BlockAllocator.java 2006-09-27 09:30:21 UTC (rev 10840) +++ rvmroot/trunk/MMTk/src/org/mmtk/utility/alloc/BlockAllocator.java 2006-09-27 13:41:06 UTC (rev 10841) @@ -332,7 +332,7 @@ * address (all blocks on a given page are homogeneous with respect * to block size class). * - * @param address The address of interest + * @param block The address of interest * @param sc The value to which this field is to be set */ private static final void setBlkSizeMetaData(Address block, byte sc) @@ -387,7 +387,7 @@ * address (all blocks on a given page are homogeneous with respect * to block size class). * - * @param address The address of interest + * @param block The address of interest * @param sc The value to which this field is to be set */ public static final void setAllClientSizeClass(Address block, int blocksc, byte sc) Modified: rvmroot/trunk/MMTk/src/org/mmtk/utility/heap/Mmapper.java =================================================================== --- rvmroot/trunk/MMTk/src/org/mmtk/utility/heap/Mmapper.java 2006-09-27 09:30:21 UTC (rev 10840) +++ rvmroot/trunk/MMTk/src/org/mmtk/utility/heap/Mmapper.java 2006-09-27 13:41:06 UTC (rev 10841) @@ -221,10 +221,10 @@ } /** - * Return true if the given address has been mmapped + * Return true if the given object has been mmapped * - * @param addr The address in question. - * @return true if the given address has been mmapped + * @param object The object in question. + * @return true if the given object has been mmapped */ public static boolean objectIsMapped(ObjectReference object) throws UninterruptiblePragma { Modified: rvmroot/trunk/MMTk/src/org/mmtk/utility/heap/MonotonePageResource.java =================================================================== --- rvmroot/trunk/MMTk/src/org/mmtk/utility/heap/MonotonePageResource.java 2006-09-27 09:30:21 UTC (rev 10840) +++ rvmroot/trunk/MMTk/src/org/mmtk/utility/heap/MonotonePageResource.java 2006-09-27 13:41:06 UTC (rev 10841) @@ -99,7 +99,7 @@ * mmpapped and zeroed before returning the address of the start of * the region. If the request cannot be satisified, return zero. * - * @param pages The number of pages to be allocated. + * @param requestPages The number of pages to be allocated. * @return The start of the first page if successful, zero on * failure. */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pet...@us...> - 2007-06-22 09:15:23
|
Revision: 12765 http://svn.sourceforge.net/jikesrvm/?rev=12765&view=rev Author: peter_donald Date: 2007-06-22 02:15:21 -0700 (Fri, 22 Jun 2007) Log Message: ----------- Revert last change as the messages are not triggered by normal behaviour but are triggering due to a race condition in MMTk somewhere. Daniels working on the correct fix Modified Paths: -------------- rvmroot/trunk/MMTk/src/org/mmtk/utility/Barrier.java rvmroot/trunk/MMTk/src/org/mmtk/utility/alloc/Allocator.java Modified: rvmroot/trunk/MMTk/src/org/mmtk/utility/Barrier.java =================================================================== --- rvmroot/trunk/MMTk/src/org/mmtk/utility/Barrier.java 2007-06-22 07:47:54 UTC (rev 12764) +++ rvmroot/trunk/MMTk/src/org/mmtk/utility/Barrier.java 2007-06-22 09:15:21 UTC (rev 12765) @@ -15,7 +15,6 @@ import org.mmtk.vm.SynchronizedCounter; import org.mmtk.vm.VM; -import org.mmtk.utility.options.Options; import org.vmmagic.pragma.*; @@ -112,19 +111,14 @@ } else { long elapsed = VM.statistics.cycles() - startCheck; if (elapsed - lastElapsed > WARN_PERIOD) { - if (Options.verbose.getValue() >= 1) { - Log.write("GC Warning: Barrier wait has reached "); Log.write(VM.statistics.cyclesToSecs(elapsed)); - Log.write(" seconds. Called from "); Log.write(where); Log.write(". myOrder = "); Log.write(myValue); - Log.write(" count is "); Log.write(c.peek()); Log.write(" waiting for "); Log.write(target - 1); - Log.writeln(); - lastElapsed = elapsed; - } + Log.write("GC Warning: Barrier wait has reached "); Log.write(VM.statistics.cyclesToSecs(elapsed)); + Log.write(" seconds. Called from "); Log.write(where); Log.write(". myOrder = "); Log.write(myValue); + Log.write(" count is "); Log.write(c.peek()); Log.write(" waiting for "); Log.write(target - 1); + Log.writeln(); + lastElapsed = elapsed; } - if (elapsed > TIME_OUT) { - if (Options.verbose.getValue() >= 1) { - VM.assertions.fail("GC Error: Barrier Timeout"); - } - } + if (elapsed > TIME_OUT) + VM.assertions.fail("GC Error: Barrier Timeout"); } } } Modified: rvmroot/trunk/MMTk/src/org/mmtk/utility/alloc/Allocator.java =================================================================== --- rvmroot/trunk/MMTk/src/org/mmtk/utility/alloc/Allocator.java 2007-06-22 07:47:54 UTC (rev 12764) +++ rvmroot/trunk/MMTk/src/org/mmtk/utility/alloc/Allocator.java 2007-06-22 09:15:21 UTC (rev 12765) @@ -15,7 +15,6 @@ import org.mmtk.plan.Plan; import org.mmtk.policy.Space; import org.mmtk.utility.*; -import org.mmtk.utility.options.Options; import org.mmtk.utility.statistics.*; import org.mmtk.vm.VM; @@ -260,18 +259,16 @@ current = VM.activePlan.mutator().getOwnAllocator(current); } } - if (Options.verbose.getValue() >= 1) { - Log.write("GC Warning: Possible VM range imbalance - Allocator.allocSlow failed on request of "); - Log.write(bytes); - Log.write(" on space "); - Log.writeln(Plan.getSpaceNameFromAllocatorAnyLocal(this)); - Log.write("gcCountStart = "); - Log.writeln(gcCountStart); - Log.write("gcCount (now) = "); - Log.writeln(Stats.gcCount()); - Space.printUsageMB(); - VM.assertions.dumpStack(); - } + Log.write("GC Warning: Possible VM range imbalance - Allocator.allocSlow failed on request of "); + Log.write(bytes); + Log.write(" on space "); + Log.writeln(Plan.getSpaceNameFromAllocatorAnyLocal(this)); + Log.write("gcCountStart = "); + Log.writeln(gcCountStart); + Log.write("gcCount (now) = "); + Log.writeln(Stats.gcCount()); + Space.printUsageMB(); + VM.assertions.dumpStack(); VM.assertions.failWithOutOfMemoryError(); /* NOTREACHED */ return Address.zero(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ste...@us...> - 2007-09-08 03:29:55
|
Revision: 13518 http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=13518&view=rev Author: steveb-oss Date: 2007-09-07 20:29:51 -0700 (Fri, 07 Sep 2007) Log Message: ----------- Clean up and generalize generic free list Modified Paths: -------------- rvmroot/trunk/MMTk/src/org/mmtk/utility/BaseGenericFreeList.java rvmroot/trunk/MMTk/src/org/mmtk/utility/GenericFreeList.java Removed Paths: ------------- rvmroot/trunk/MMTk/src/org/mmtk/utility/SmallGenericFreeList.java Modified: rvmroot/trunk/MMTk/src/org/mmtk/utility/BaseGenericFreeList.java =================================================================== --- rvmroot/trunk/MMTk/src/org/mmtk/utility/BaseGenericFreeList.java 2007-09-07 12:37:17 UTC (rev 13517) +++ rvmroot/trunk/MMTk/src/org/mmtk/utility/BaseGenericFreeList.java 2007-09-08 03:29:51 UTC (rev 13518) @@ -105,11 +105,11 @@ */ public final int alloc(int size) { // Note: -1 is both the default return value *and* the start sentinel index - int rtn = HEAD; // HEAD = -1 + int unit = head; // HEAD = -1 int s = 0; - while (((rtn = getNext(rtn)) != HEAD) && ((s = getSize(rtn)) < size)); + while (((unit = getNext(unit)) != head) && ((s = getSize(unit)) < size)); - return alloc(size, rtn, s); + return alloc(size, unit, s); } /** @@ -120,10 +120,10 @@ */ public final boolean couldAlloc(int size) { // Note: -1 is both the default return value *and* the start sentinel index - int rtn = HEAD; // HEAD = -1 - while (((rtn = getNext(rtn)) != HEAD) && (getSize(rtn) < size)); + int unit = head; // HEAD = -1 + while (((unit = getNext(unit)) != head) && (getSize(unit) < size)); - return (rtn != -1); + return (unit != head); } /** @@ -139,7 +139,7 @@ if (getFree(unit) && (s = getSize(unit)) >= size) return alloc(size, unit, s); else - return HEAD; + return FAILURE; } /** @@ -158,6 +158,7 @@ } if (DEBUG) dbgPrintFree(); + return unit; } @@ -165,6 +166,7 @@ * Free a previously allocated contiguous lump of units. * * @param unit The index of the first unit. + * @param returnCoalescedSize TODO * @return The number of units freed. */ public final int free(int unit) { @@ -173,9 +175,9 @@ int end = getFree(getRight(unit)) ? getRight(unit) : unit; if (start != end) coalesce(start, end); + addToFree(start); if (DEBUG) dbgPrintFree(); - return freed; } @@ -211,8 +213,9 @@ * @param units The number of units in the heap */ protected final void initializeHeap(int units, int grain) { - // Initialize the sentiels - setSentinel(-1); + // Initialize the sentinels + for (int i = 1; i <= heads; i++) + setSentinel(-i); setSentinel(units); // create the free list item @@ -243,6 +246,7 @@ setSize(unit, size); setSize(unit + size, basesize - size); addToFree(unit + size); + if (DEBUG) dbgPrintFree(); } /** @@ -267,10 +271,10 @@ */ private void addToFree(int unit) { setFree(unit, true); - int next = getNext(HEAD); + int next = getNext(head); setNext(unit, next); - setNext(HEAD, unit); - setPrev(unit, HEAD); + setNext(head, unit); + setPrev(unit, head); setPrev(next, unit); } @@ -284,6 +288,7 @@ int prev = getPrev(unit); setNext(prev, next); setPrev(next, prev); + if (DEBUG) dbgPrintFree(); } /** @@ -304,8 +309,8 @@ void dbgPrintFree() { if (DEBUG) { Log.write("FL["); - int i = HEAD; - while ((i = getNext(i)) != HEAD) { + int i = head; + while ((i = getNext(i)) != head) { boolean f = getFree(i); int s = getSize(i); if (!f) @@ -313,9 +318,9 @@ Log.write(i); if (!f) Log.write("<-"); - Log.write("["); + Log.write("("); Log.write(s); - Log.write("]"); + Log.write(")"); Log.write(" "); Log.flush(); } @@ -335,5 +340,8 @@ abstract int getLeft(int unit); protected static final boolean DEBUG = false; - protected static final int HEAD = -1; + protected static final int FAILURE = -1; + + protected int heads = 1; + protected int head = -heads; } Modified: rvmroot/trunk/MMTk/src/org/mmtk/utility/GenericFreeList.java =================================================================== --- rvmroot/trunk/MMTk/src/org/mmtk/utility/GenericFreeList.java 2007-09-07 12:37:17 UTC (rev 13517) +++ rvmroot/trunk/MMTk/src/org/mmtk/utility/GenericFreeList.java 2007-09-08 03:29:51 UTC (rev 13518) @@ -98,26 +98,65 @@ /** * Constructor + * + * @param units The number of allocatable units for this free list */ public GenericFreeList(int units) { this(units, units); } + + /** + * Constructor + * + * @param units The number of allocatable units for this free list + * @param grain Units are allocated such that they will never cross this granularity boundary + */ public GenericFreeList(int units, int grain) { + this(units, grain, 1); + } + + /** + * Constructor + * + * @param units The number of allocatable units for this free list + * @param grain Units are allocated such that they will never cross this granularity boundary + * @param heads The number of free lists which will share this instance + */ + public GenericFreeList(int units, int grain, int heads) { if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(units <= MAX_UNITS); + this.heads = heads; + head = -1; // allocate the data structure, including space for top & bottom sentinels - table = new int[(units + 2) << 1]; + table = new int[(units + 1 + heads) << 1]; initializeHeap(units, grain); } /** + * Constructor + * + * @param parent The parent, owning the data structures this instance will share + * @param ordinal The ordinal number of this child + */ + public GenericFreeList(GenericFreeList parent, int ordinal) { + this.table = parent.getTable(); + this.heads = parent.getHeads(); + this.head = -(1 + ordinal); + if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(-this.head <= this.heads); + } + + /** Getter */ + int[] getTable() { return table; } + int getHeads() { return heads; } + + /** * Initialize a unit as a sentinel * - * @param unit The unit to be initilized + * @param unit The unit to be initialized */ protected void setSentinel(int unit) { - setLoEntry(unit, SENTINEL_LO_INIT); - setHiEntry(unit, SENTINEL_HI_INIT); + setLoEntry(unit, NEXT_MASK & unit); + setHiEntry(unit, PREV_MASK & unit); } /** @@ -186,7 +225,7 @@ */ protected int getNext(int unit) { int next = getHiEntry(unit) & NEXT_MASK; - return (next <= MAX_UNITS) ? next : HEAD; + return (next <= MAX_UNITS) ? next : head; } /** @@ -196,9 +235,9 @@ * @param next The value to be set. */ protected void setNext(int unit, int next) { - if (VM.VERIFY_ASSERTIONS) VM.assertions._assert((next >= HEAD) && (next <= MAX_UNITS)); + if (VM.VERIFY_ASSERTIONS) VM.assertions._assert((next >= -heads) && (next <= MAX_UNITS)); int oldValue = getHiEntry(unit); - int newValue = (next == HEAD) ? (oldValue | NEXT_MASK) : ((oldValue & ~NEXT_MASK) | next); + int newValue = (oldValue & ~NEXT_MASK) | (next & NEXT_MASK); setHiEntry(unit, newValue); } @@ -211,7 +250,7 @@ */ protected int getPrev(int unit) { int prev = getLoEntry(unit) & PREV_MASK; - return (prev <= MAX_UNITS) ? prev : HEAD; + return (prev <= MAX_UNITS) ? prev : head; } /** @@ -221,11 +260,10 @@ * @param prev The value to be set. */ protected void setPrev(int unit, int prev) { - if (VM.VERIFY_ASSERTIONS) VM.assertions._assert((prev >= HEAD) && (prev <= MAX_UNITS)); - if (prev == HEAD) - setLoEntry(unit, (getLoEntry(unit) | PREV_MASK)); - else - setLoEntry(unit, (getLoEntry(unit) & ~PREV_MASK) | prev); + if (VM.VERIFY_ASSERTIONS) VM.assertions._assert((prev >= -heads) && (prev <= MAX_UNITS)); + int oldValue = getLoEntry(unit); + int newValue = (oldValue & ~PREV_MASK) | (prev & PREV_MASK); + setLoEntry(unit, newValue); } /** @@ -249,10 +287,10 @@ * @return The contents of the unit */ private int getLoEntry(int unit) { - return table[(unit + 1) << 1]; + return table[(unit + heads) << 1]; } private int getHiEntry(int unit) { - return table[((unit + 1) << 1) + 1]; + return table[((unit + heads) << 1) + 1]; } /** @@ -262,10 +300,10 @@ * @param value The contents of the unit */ private void setLoEntry(int unit, int value) { - table[(unit + 1) << 1] = value; + table[(unit + heads) << 1] = value; } private void setHiEntry(int unit, int value) { - table[((unit + 1) << 1) + 1] = value; + table[((unit + heads) << 1) + 1] = value; } private static final int TOTAL_BITS = 32; @@ -277,10 +315,5 @@ private static final int MULTI_MASK = 1 << (TOTAL_BITS - 1); private static final int SIZE_MASK = (int) ((((long) 1) << UNIT_BITS) - 1); - // want the sentinels to be "used" & "single", and want first - // sentinel to initially point to itself. - private static final int SENTINEL_LO_INIT = PREV_MASK; - private static final int SENTINEL_HI_INIT = NEXT_MASK; - private int[] table; } Deleted: rvmroot/trunk/MMTk/src/org/mmtk/utility/SmallGenericFreeList.java =================================================================== --- rvmroot/trunk/MMTk/src/org/mmtk/utility/SmallGenericFreeList.java 2007-09-07 12:37:17 UTC (rev 13517) +++ rvmroot/trunk/MMTk/src/org/mmtk/utility/SmallGenericFreeList.java 2007-09-08 03:29:51 UTC (rev 13518) @@ -1,278 +0,0 @@ -/* - * This file is part of the Jikes RVM project (http://jikesrvm.org). - * - * This file is licensed to You under the Common Public License (CPL); - * You may not use this file except in compliance with the License. You - * may obtain a copy of the License at - * - * http://www.opensource.org/licenses/cpl1.0.php - * - * See the COPYRIGHT.txt file distributed with this work for information - * regarding copyright ownership. - */ -package org.mmtk.utility; - -import org.mmtk.vm.VM; - -import org.vmmagic.pragma.Uninterruptible; - -/** - * This is a very simple, generic malloc-free allocator. It works - * abstractly, in "units", which the user may associate with some - * other allocatable resource (e.g. heap blocks). The user issues - * requests for N units and the allocator returns the index of the - * first of a contiguous set of N units or fails, returning -1. The - * user frees the block of N units by calling <code>free()</code> with - * the index of the first unit as the argument.<p> - * - * Properties/Constraints:<ul> - * <li> The allocator consumes one word per allocatable unit (plus - * a fixed overhead of about 128 words).</li> - * <li> The allocator can only deal with MAX_UNITS units (see below for - * the value).</li> - * </ul> - * - * The basic data structure used by the algorithm is a large table, - * with one word per allocatable unit. Each word is used in a - * number of different ways, some combination of "undefined" (32), - * "free/used" (1), "multi/single" (1), "prev" (15), "next" (15) & - * "size" (15) where field sizes in bits are in parenthesis. - * <pre> - * +-+-+-----------+-----------+ - * |f|m| prev | next/size | - * +-+-+-----------+-----------+ - * - * - single free unit: "free", "single", "prev", "next" - * - single used unit: "used", "single" - * - contiguous free units - * . first unit: "free", "multi", "prev", "next" - * . second unit: "free", "multi", "size" - * . last unit: "free", "multi", "size" - * - contiguous used units - * . first unit: "used", "multi", "prev", "next" - * . second unit: "used", "multi", "size" - * . last unit: "used", "multi", "size" - * - any other unit: undefined - * - * +-+-+-----------+-----------+ - * top sentinel |0|0| tail | head | [-1] - * +-+-+-----------+-----------+ - * .... - * /-------- +-+-+-----------+-----------+ - * | |1|1| prev | next | [j] - * | +-+-+-----------+-----------+ - * | |1|1| | size | [j+1] - * free multi +-+-+-----------+-----------+ - * unit block | ... | ... - * | +-+-+-----------+-----------+ - * | |1|1| | size | - * >-------- +-+-+-----------+-----------+ - * single free unit |1|0| prev | next | - * >-------- +-+-+-----------+-----------+ - * single used unit |0|0| | - * >-------- +-+-+-----------------------+ - * | |0|1| | - * | +-+-+-----------+-----------+ - * | |0|1| | size | - * used multi +-+-+-----------+-----------+ - * unit block | ... | - * | +-+-+-----------+-----------+ - * | |0|1| | size | - * \-------- +-+-+-----------+-----------+ - * .... - * +-+-+-----------------------+ - * bottom sentinel |0|0| | [N] - * +-+-+-----------------------+ - * </pre> - * The sentinels serve as guards against out of range coalescing - * because they both appear as "used" blocks and so will never - * coalesce. The top sentinel also serves as the head and tail of - * the doubly linked list of free blocks. - */ -@Uninterruptible final class SmallGenericFreeList extends BaseGenericFreeList implements Constants { - - /**************************************************************************** - * - * Public instance methods - */ - - /** - * Constructor - */ - SmallGenericFreeList(int units) { - if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(units <= MAX_UNITS); - - // allocate the data structure, including space for top & bottom sentinels - table = new int[units + 2]; - - initializeHeap(units); - } - - /** - * Initialize a unit as a sentinel - * - * @param unit The unit to be initilized - */ - protected void setSentinel(int unit) { - setEntry(unit, SENTINEL_INIT); - } - - /** - * Get the size of a lump of units - * - * @param unit The first unit in the lump of units - * @return The size of the lump of units - */ - protected int getSize(int unit) { - if ((getEntry(unit) & MULTI_MASK) == MULTI_MASK) - return (getEntry(unit + 1) & SIZE_MASK); - else - return 1; - } - - /** - * Set the size of lump of units - * - * @param unit The first unit in the lump of units - * @param size The size of the lump of units - */ - protected void setSize(int unit, int size) { - if (size > 1) { - setEntry(unit, getEntry(unit) | MULTI_MASK); - setEntry(unit + 1, MULTI_MASK | size); - setEntry(unit + size - 1, MULTI_MASK | size); - } else - setEntry(unit, getEntry(unit) & ~MULTI_MASK); - } - - /** - * Establish whether a lump of units is free - * - * @param unit The first or last unit in the lump - * @return True if the lump is free - */ - protected boolean getFree(int unit) { - return ((getEntry(unit) & FREE_MASK) == FREE_MASK); - } - - /** - * Set the "free" flag for a lump of units (both the first and last - * units in the lump are set. - * - * @param unit The first unit in the lump - * @param isFree True if the lump is to be marked as free - */ - protected void setFree(int unit, boolean isFree) { - int size; - if (isFree) { - setEntry(unit, getEntry(unit) | FREE_MASK); - if ((size = getSize(unit)) > 1) - setEntry(unit + size - 1, getEntry(unit + size - 1) | FREE_MASK); - } else { - setEntry(unit, getEntry(unit) & ~FREE_MASK); - if ((size = getSize(unit)) > 1) - setEntry(unit + size - 1, getEntry(unit + size - 1) & ~FREE_MASK); - } - } - - /** - * Get the next lump in the doubly linked free list - * - * @param unit The index of the first unit in the current lump - * @return The index of the first unit of the next lump of units in the list - */ - protected int getNext(int unit) { - int next = getEntry(unit) & NEXT_MASK; - return (next <= MAX_UNITS) ? next : HEAD; - } - - /** - * Set the next lump in the doubly linked free list - * - * @param unit The index of the first unit in the lump to be set - * @param next The value to be set. - */ - protected void setNext(int unit, int next) { - if (VM.VERIFY_ASSERTIONS) VM.assertions._assert((next >= HEAD) && (next <= MAX_UNITS)); - if (next == HEAD) - setEntry(unit, (getEntry(unit) | NEXT_MASK)); - else - setEntry(unit, (getEntry(unit) & ~NEXT_MASK) | next); - } - - /** - * Get the previous lump in the doubly linked free list - * - * @param unit The index of the first unit in the current lump - * @return The index of the first unit of the previous lump of units - * in the list - */ - protected int getPrev(int unit) { - int prev = (getEntry(unit) & PREV_MASK) >> PREV_SHIFT; - return (prev <= MAX_UNITS) ? prev : HEAD; - } - - /** - * Set the previous lump in the doubly linked free list - * - * @param unit The index of the first unit in the lump to be set - * @param prev The value to be set. - */ - protected void setPrev(int unit, int prev) { - if (VM.VERIFY_ASSERTIONS) VM.assertions._assert((prev >= HEAD) && (prev <= MAX_UNITS)); - if (prev == HEAD) - setEntry(unit, (getEntry(unit) | PREV_MASK)); - else - setEntry(unit, (getEntry(unit) & ~PREV_MASK) | (prev << PREV_SHIFT)); - } - - /** - * Get the lump to the "left" of the current lump (i.e. "above" it) - * - * @param unit The index of the first unit in the lump in question - * @return The index of the first unit in the lump to the - * "left"/"above" the lump in question. - */ - protected int getLeft(int unit) { - if ((getEntry(unit - 1) & MULTI_MASK) == MULTI_MASK) - return unit - (getEntry(unit - 1) & SIZE_MASK); - else - return unit - 1; - } - - /** - * Get the contents of an entry - * - * @param unit The index of the unit - * @return The contents of the unit - */ - private int getEntry(int unit) { - return table[unit + 1]; - } - - /** - * Set the contents of an entry - * - * @param unit The index of the unit - * @param value The contents of the unit - */ - private void setEntry(int unit, int value) { - table[unit + 1] = value; - } - - private static final int TOTAL_BITS = 32; - private static final int UNIT_BITS = (TOTAL_BITS - 2) >> 1; - private static final int MAX_UNITS = ((1 << UNIT_BITS) - 1) - 1; - private static final int NEXT_MASK = (1 << UNIT_BITS) - 1; - private static final int PREV_SHIFT = UNIT_BITS; - private static final int PREV_MASK = ((1 << UNIT_BITS) - 1) << PREV_SHIFT; - private static final int FREE_MASK = 1 << (TOTAL_BITS - 1); - private static final int MULTI_MASK = 1 << (TOTAL_BITS - 2); - private static final int SIZE_MASK = (1 << UNIT_BITS) - 1; - - // want the sentinels to be "used" & "single", and want first - // sentinel to initially point to itself. - private static final int SENTINEL_INIT = NEXT_MASK | PREV_MASK; - - private int[] table; -} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ste...@us...> - 2007-09-09 05:34:55
|
Revision: 13520 http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=13520&view=rev Author: steveb-oss Date: 2007-09-08 22:34:47 -0700 (Sat, 08 Sep 2007) Log Message: ----------- More minor refinements to generalize the generic free list Modified Paths: -------------- rvmroot/trunk/MMTk/src/org/mmtk/utility/BaseGenericFreeList.java rvmroot/trunk/MMTk/src/org/mmtk/utility/GenericFreeList.java Modified: rvmroot/trunk/MMTk/src/org/mmtk/utility/BaseGenericFreeList.java =================================================================== --- rvmroot/trunk/MMTk/src/org/mmtk/utility/BaseGenericFreeList.java 2007-09-09 03:30:07 UTC (rev 13519) +++ rvmroot/trunk/MMTk/src/org/mmtk/utility/BaseGenericFreeList.java 2007-09-09 05:34:47 UTC (rev 13520) @@ -109,7 +109,7 @@ int s = 0; while (((unit = getNext(unit)) != head) && ((s = getSize(unit)) < size)); - return alloc(size, unit, s); + return (unit == head) ? FAILURE : alloc(size, unit, s); } /** @@ -166,17 +166,32 @@ * Free a previously allocated contiguous lump of units. * * @param unit The index of the first unit. - * @param returnCoalescedSize TODO - * @return The number of units freed. + * @return return the size of the unit which was freed. */ public final int free(int unit) { + return free(unit, false); + } + + /** + * Free a previously allocated contiguous lump of units. + * + * @param unit The index of the first unit. + * @param returnCoalescedSize if true, return the coalesced size + * @return The number of units freed. if returnCoalescedSize is + * false, return the size of the unit which was freed. Otherwise + * return the size of the unit now available (the coalesced size) + */ + public final int free(int unit, boolean returnCoalescedSize) { int freed = getSize(unit); int start = getFree(getLeft(unit)) ? getLeft(unit) : unit; int end = getFree(getRight(unit)) ? getRight(unit) : unit; if (start != end) coalesce(start, end); + if (returnCoalescedSize) + freed = getSize(start); addToFree(start); + if (DEBUG) dbgPrintFree(); return freed; } @@ -341,6 +356,7 @@ protected static final boolean DEBUG = false; protected static final int FAILURE = -1; + protected static final int MAX_HEADS = 128; // somewhat arbitrary protected int heads = 1; protected int head = -heads; Modified: rvmroot/trunk/MMTk/src/org/mmtk/utility/GenericFreeList.java =================================================================== --- rvmroot/trunk/MMTk/src/org/mmtk/utility/GenericFreeList.java 2007-09-09 03:30:07 UTC (rev 13519) +++ rvmroot/trunk/MMTk/src/org/mmtk/utility/GenericFreeList.java 2007-09-09 05:34:47 UTC (rev 13520) @@ -89,7 +89,8 @@ * coalesce. The top sentinel also serves as the head and tail of * the doubly linked list of free blocks. */ -@Uninterruptible public final class GenericFreeList extends BaseGenericFreeList implements Constants { +@Uninterruptible +public final class GenericFreeList extends BaseGenericFreeList implements Constants { /**************************************************************************** * @@ -123,7 +124,7 @@ * @param heads The number of free lists which will share this instance */ public GenericFreeList(int units, int grain, int heads) { - if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(units <= MAX_UNITS); + if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(units <= MAX_UNITS && heads <= MAX_HEADS); this.heads = heads; head = -1; @@ -308,7 +309,7 @@ private static final int TOTAL_BITS = 32; private static final int UNIT_BITS = (TOTAL_BITS - 1); - private static final int MAX_UNITS = (int) (((((long) 1) << UNIT_BITS) - 1) - 1); + private static final int MAX_UNITS = (int) (((((long) 1) << UNIT_BITS) - 1) - MAX_HEADS - 1); private static final int NEXT_MASK = (int) ((((long) 1) << UNIT_BITS) - 1); private static final int PREV_MASK = (int) ((((long) 1) << UNIT_BITS) - 1); private static final int FREE_MASK = 1 << (TOTAL_BITS - 1); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ste...@us...> - 2007-09-15 05:57:03
|
Revision: 13586 http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=13586&view=rev Author: steveb-oss Date: 2007-09-14 22:56:45 -0700 (Fri, 14 Sep 2007) Log Message: ----------- Add ability to explicitly block coalescing Modified Paths: -------------- rvmroot/trunk/MMTk/src/org/mmtk/utility/BaseGenericFreeList.java rvmroot/trunk/MMTk/src/org/mmtk/utility/GenericFreeList.java rvmroot/trunk/MMTk/src/org/mmtk/utility/heap/FreeListPageResource.java Modified: rvmroot/trunk/MMTk/src/org/mmtk/utility/BaseGenericFreeList.java =================================================================== --- rvmroot/trunk/MMTk/src/org/mmtk/utility/BaseGenericFreeList.java 2007-09-15 05:12:20 UTC (rev 13585) +++ rvmroot/trunk/MMTk/src/org/mmtk/utility/BaseGenericFreeList.java 2007-09-15 05:56:45 UTC (rev 13586) @@ -183,8 +183,10 @@ */ public final int free(int unit, boolean returnCoalescedSize) { int freed = getSize(unit); - int start = getFree(getLeft(unit)) ? getLeft(unit) : unit; - int end = getFree(getRight(unit)) ? getRight(unit) : unit; + int left = getLeft(unit); + int start = isCoalescable(unit) && getFree(left) ? left : unit; + int right = getRight(unit); + int end = isCoalescable(right) && getFree(right) ? right : unit; if (start != end) coalesce(start, end); @@ -353,6 +355,7 @@ abstract int getPrev(int unit); abstract void setPrev(int unit, int prev); abstract int getLeft(int unit); + abstract boolean isCoalescable(int unit); protected static final boolean DEBUG = false; public static final int FAILURE = -1; Modified: rvmroot/trunk/MMTk/src/org/mmtk/utility/GenericFreeList.java =================================================================== --- rvmroot/trunk/MMTk/src/org/mmtk/utility/GenericFreeList.java 2007-09-15 05:12:20 UTC (rev 13585) +++ rvmroot/trunk/MMTk/src/org/mmtk/utility/GenericFreeList.java 2007-09-15 05:56:45 UTC (rev 13586) @@ -268,6 +268,39 @@ } /** + * Set the uncoalescable bit associated with this unit. + * This ensures this unit cannot be coalesced with units below + * it. + * + * @param unit The unit whose uncoalescable bit is to be set + */ + public void setUncoalescable(int unit) { + setLoEntry(unit, getLoEntry(unit) | COALESC_MASK); + } + + /** + * Clear the uncoalescable bit associated with this unit. + * This allows this unit to be coalesced with units below + * it. + * + * @param unit The unit whose uncoalescable bit is to be cleared + */ + public void clearUncoalescable(int unit) { + setLoEntry(unit, getLoEntry(unit) & ~COALESC_MASK); + } + + /** + * Return true if this unit may be coalesced with the unit below it. + * + * @param The unit in question + * @return True if this unit may be coalesced with the unit below it. + */ + @Override + public boolean isCoalescable(int unit) { + return (getLoEntry(unit) & COALESC_MASK) == 0; + } + + /** * Get the lump to the "left" of the current lump (i.e. "above" it) * * @param unit The index of the first unit in the lump in question @@ -281,6 +314,7 @@ return unit - 1; } + /** * Get the contents of an entry * @@ -308,12 +342,13 @@ } private static final int TOTAL_BITS = 32; - private static final int UNIT_BITS = (TOTAL_BITS - 1); - private static final int MAX_UNITS = (int) (((((long) 1) << UNIT_BITS) - 1) - MAX_HEADS - 1); + private static final int UNIT_BITS = (TOTAL_BITS - 2); + public static final int MAX_UNITS = (int) (((((long) 1) << UNIT_BITS) - 1) - MAX_HEADS - 1); private static final int NEXT_MASK = (int) ((((long) 1) << UNIT_BITS) - 1); private static final int PREV_MASK = (int) ((((long) 1) << UNIT_BITS) - 1); private static final int FREE_MASK = 1 << (TOTAL_BITS - 1); private static final int MULTI_MASK = 1 << (TOTAL_BITS - 1); + private static final int COALESC_MASK = 1 << (TOTAL_BITS - 2); private static final int SIZE_MASK = (int) ((((long) 1) << UNIT_BITS) - 1); private int[] table; Modified: rvmroot/trunk/MMTk/src/org/mmtk/utility/heap/FreeListPageResource.java =================================================================== --- rvmroot/trunk/MMTk/src/org/mmtk/utility/heap/FreeListPageResource.java 2007-09-15 05:12:20 UTC (rev 13585) +++ rvmroot/trunk/MMTk/src/org/mmtk/utility/heap/FreeListPageResource.java 2007-09-15 05:56:45 UTC (rev 13586) @@ -29,8 +29,8 @@ * virtual address space are checked. If the request for space can't * be satisfied (for either reason) a GC may be triggered.<p> */ -@Uninterruptible public final class FreeListPageResource extends PageResource - implements Constants { +@Uninterruptible +public final class FreeListPageResource extends PageResource implements Constants { private final GenericFreeList freeList; private int highWaterMark = 0; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ste...@us...> - 2007-09-18 12:32:43
|
Revision: 13629 http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=13629&view=rev Author: steveb-oss Date: 2007-09-18 05:32:41 -0700 (Tue, 18 Sep 2007) Log Message: ----------- Fix large heap bug introduced in r13624 Modified Paths: -------------- rvmroot/trunk/MMTk/src/org/mmtk/utility/GenericFreeList.java rvmroot/trunk/MMTk/src/org/mmtk/utility/heap/FreeListPageResource.java rvmroot/trunk/MMTk/src/org/mmtk/utility/heap/Map.java Modified: rvmroot/trunk/MMTk/src/org/mmtk/utility/GenericFreeList.java =================================================================== --- rvmroot/trunk/MMTk/src/org/mmtk/utility/GenericFreeList.java 2007-09-18 11:49:45 UTC (rev 13628) +++ rvmroot/trunk/MMTk/src/org/mmtk/utility/GenericFreeList.java 2007-09-18 12:32:41 UTC (rev 13629) @@ -145,7 +145,7 @@ @Interruptible public void resizeFreeList(int units, int grain) { if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(parent == null && !Plan.isInitialized()); - table = new int[(units + 1 + heads) << 1]; + table = new int[(units + 1 + heads) << 1]; initializeHeap(units, grain); } Modified: rvmroot/trunk/MMTk/src/org/mmtk/utility/heap/FreeListPageResource.java =================================================================== --- rvmroot/trunk/MMTk/src/org/mmtk/utility/heap/FreeListPageResource.java 2007-09-18 11:49:45 UTC (rev 13628) +++ rvmroot/trunk/MMTk/src/org/mmtk/utility/heap/FreeListPageResource.java 2007-09-18 12:32:41 UTC (rev 13629) @@ -330,14 +330,18 @@ } /** - * Resize the free list associated with this resource. This method is - * called to re-set the free list once the global free list (which it shares) - * is finalized. There's a circular dependency, so we need an explicit - * call-back to reset the free list size. + * Resize the free list associated with this resource and nail down + * its start address. This method is called to re-set the free list + * once the global free list (which it shares) is finalized and the + * base address is finalized. There's a circular dependency, so we + * need an explicit call-back to reset the free list size and start + * + * @param startAddress The final start address for the discontiguous space. */ @Interruptible - public void resizeFreeList() { + public void resizeFreeList(Address startAddress) { if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(!contiguous && !Plan.isInitialized()); + start = startAddress; freeList.resizeFreeList(); } } Modified: rvmroot/trunk/MMTk/src/org/mmtk/utility/heap/Map.java =================================================================== --- rvmroot/trunk/MMTk/src/org/mmtk/utility/heap/Map.java 2007-09-18 11:49:45 UTC (rev 13628) +++ rvmroot/trunk/MMTk/src/org/mmtk/utility/heap/Map.java 2007-09-18 12:32:41 UTC (rev 13629) @@ -217,12 +217,13 @@ @Interruptible public static void finalizeStaticSpaceMap() { /* establish bounds of discontiguous space */ - int start = hashAddress(Space.getDiscontigStart()); + Address startAddress = Space.getDiscontigStart(); + int start = hashAddress(startAddress); int end = hashAddress(Space.getDiscontigEnd()); - int pages = (end - start)*Space.PAGES_IN_CHUNK; + int pages = (end - start)*Space.PAGES_IN_CHUNK + 1; globalPageMap.resizeFreeList(pages, pages); for (int pr = 0; pr < sharedDiscontigFLCount; pr++) - sharedFLMap[pr].resizeFreeList(); + sharedFLMap[pr].resizeFreeList(startAddress); /* set up the region map free list */ regionMap.alloc(start); // block out entire bottom of address range This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rg...@us...> - 2006-12-26 05:05:58
|
Revision: 11250 http://svn.sourceforge.net/jikesrvm/?rev=11250&view=rev Author: rgarner Date: 2006-12-25 21:05:50 -0800 (Mon, 25 Dec 2006) Log Message: ----------- Remove compilation warnings Modified Paths: -------------- rvmroot/trunk/MMTk/src/org/mmtk/utility/deque/LocalDeque.java rvmroot/trunk/MMTk/src/org/mmtk/utility/deque/SortTODSharedDeque.java rvmroot/trunk/MMTk/src/org/mmtk/utility/deque/TraceBuffer.java rvmroot/trunk/MMTk/src/org/mmtk/utility/deque/WriteBuffer.java rvmroot/trunk/MMTk/src/org/mmtk/utility/heap/Mmapper.java Modified: rvmroot/trunk/MMTk/src/org/mmtk/utility/deque/LocalDeque.java =================================================================== --- rvmroot/trunk/MMTk/src/org/mmtk/utility/deque/LocalDeque.java 2006-12-25 13:11:04 UTC (rev 11249) +++ rvmroot/trunk/MMTk/src/org/mmtk/utility/deque/LocalDeque.java 2006-12-26 05:05:50 UTC (rev 11250) @@ -53,6 +53,7 @@ * in the buffer visible to any other consumer associated with the * shared deque). */ + @Override public final void flushLocal() { super.flushLocal(); if (head.NE(Deque.HEAD_INITIAL_VALUE)) { @@ -139,8 +140,9 @@ * @param arity The arity of this buffer * @return True if the consumer has eaten all of the entries */ + @SuppressWarnings("unused") private final boolean tailStarved(int arity) { - if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(arity == queue.getArity()); + if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(arity == queue.getArity()); // entries in tail, so consume tail if (!bufferOffset(head).isZero()) { tailBufferEnd = head; Modified: rvmroot/trunk/MMTk/src/org/mmtk/utility/deque/SortTODSharedDeque.java =================================================================== --- rvmroot/trunk/MMTk/src/org/mmtk/utility/deque/SortTODSharedDeque.java 2006-12-25 13:11:04 UTC (rev 11249) +++ rvmroot/trunk/MMTk/src/org/mmtk/utility/deque/SortTODSharedDeque.java 2006-12-26 05:05:50 UTC (rev 11250) @@ -19,17 +19,14 @@ * This class specializes SortSharedQueue to sort objects according to * their time of death (TOD). * + * $Id$ + * * @author Steve Blackburn * @version $Revision$ * @date $Date$ */ @Uninterruptible final public class SortTODSharedDeque extends SortSharedDeque { - public final static String Id = "$Id$"; - private static final int BYTES_PUSHED = BYTES_IN_ADDRESS * 5; - private static final int MAX_STACK_SIZE = BYTES_PUSHED * 64; - private static final Offset INSERTION_SORT_LIMIT = Offset.fromIntSignExtend(80); - /** * Constructor * Modified: rvmroot/trunk/MMTk/src/org/mmtk/utility/deque/TraceBuffer.java =================================================================== --- rvmroot/trunk/MMTk/src/org/mmtk/utility/deque/TraceBuffer.java 2006-12-25 13:11:04 UTC (rev 11249) +++ rvmroot/trunk/MMTk/src/org/mmtk/utility/deque/TraceBuffer.java 2006-12-26 05:05:50 UTC (rev 11250) @@ -35,7 +35,7 @@ */ private static final Word TRACE_NEW_RECORD = Word.fromIntSignExtend(3); private static final Word TRACE_ALLOC_SIZE = Word.fromIntSignExtend(5); - private static final Word TRACE_ALLOC_NAME = Word.fromIntSignExtend(6); +// private static final Word TRACE_ALLOC_NAME = Word.fromIntSignExtend(6); private static final Word TRACE_ALLOC_FP = Word.fromIntSignExtend(7); private static final Word TRACE_ALLOC_THREAD = Word.fromIntSignExtend(9); private static final Word TRACE_TIB_VALUE = Word.fromIntSignExtend(10); @@ -61,12 +61,6 @@ /*********************************************************************** * - * Instance fields - */ - private SortSharedDeque tracePool; - - /*********************************************************************** - * * Public methods */ Modified: rvmroot/trunk/MMTk/src/org/mmtk/utility/deque/WriteBuffer.java =================================================================== --- rvmroot/trunk/MMTk/src/org/mmtk/utility/deque/WriteBuffer.java 2006-12-25 13:11:04 UTC (rev 11249) +++ rvmroot/trunk/MMTk/src/org/mmtk/utility/deque/WriteBuffer.java 2006-12-26 05:05:50 UTC (rev 11250) @@ -50,5 +50,4 @@ checkTailInsert(1); uncheckedTailInsert(addr); } - private static boolean inWB = false; } Modified: rvmroot/trunk/MMTk/src/org/mmtk/utility/heap/Mmapper.java =================================================================== --- rvmroot/trunk/MMTk/src/org/mmtk/utility/heap/Mmapper.java 2006-12-25 13:11:04 UTC (rev 11249) +++ rvmroot/trunk/MMTk/src/org/mmtk/utility/heap/Mmapper.java 2006-12-26 05:05:50 UTC (rev 11250) @@ -237,6 +237,7 @@ * @param addr The address to be aligned * @return The given address rounded up to an mmap chunk size */ + @SuppressWarnings("unused") // but might be useful someday private static Address chunkAlignUp(Address addr) { return chunkAlignDown(addr.plus(MMAP_CHUNK_MASK)); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pet...@us...> - 2007-06-22 07:47:56
|
Revision: 12764 http://svn.sourceforge.net/jikesrvm/?rev=12764&view=rev Author: peter_donald Date: 2007-06-22 00:47:54 -0700 (Fri, 22 Jun 2007) Log Message: ----------- MMTk should not emit debug information in scenarios that could be considered normal conditions (such as OOM). Guard the debug so that is only emitted when verbose > 1 Modified Paths: -------------- rvmroot/trunk/MMTk/src/org/mmtk/utility/Barrier.java rvmroot/trunk/MMTk/src/org/mmtk/utility/alloc/Allocator.java Modified: rvmroot/trunk/MMTk/src/org/mmtk/utility/Barrier.java =================================================================== --- rvmroot/trunk/MMTk/src/org/mmtk/utility/Barrier.java 2007-06-22 07:02:52 UTC (rev 12763) +++ rvmroot/trunk/MMTk/src/org/mmtk/utility/Barrier.java 2007-06-22 07:47:54 UTC (rev 12764) @@ -15,6 +15,7 @@ import org.mmtk.vm.SynchronizedCounter; import org.mmtk.vm.VM; +import org.mmtk.utility.options.Options; import org.vmmagic.pragma.*; @@ -111,14 +112,19 @@ } else { long elapsed = VM.statistics.cycles() - startCheck; if (elapsed - lastElapsed > WARN_PERIOD) { - Log.write("GC Warning: Barrier wait has reached "); Log.write(VM.statistics.cyclesToSecs(elapsed)); - Log.write(" seconds. Called from "); Log.write(where); Log.write(". myOrder = "); Log.write(myValue); - Log.write(" count is "); Log.write(c.peek()); Log.write(" waiting for "); Log.write(target - 1); - Log.writeln(); - lastElapsed = elapsed; + if (Options.verbose.getValue() >= 1) { + Log.write("GC Warning: Barrier wait has reached "); Log.write(VM.statistics.cyclesToSecs(elapsed)); + Log.write(" seconds. Called from "); Log.write(where); Log.write(". myOrder = "); Log.write(myValue); + Log.write(" count is "); Log.write(c.peek()); Log.write(" waiting for "); Log.write(target - 1); + Log.writeln(); + lastElapsed = elapsed; + } } - if (elapsed > TIME_OUT) - VM.assertions.fail("GC Error: Barrier Timeout"); + if (elapsed > TIME_OUT) { + if (Options.verbose.getValue() >= 1) { + VM.assertions.fail("GC Error: Barrier Timeout"); + } + } } } } Modified: rvmroot/trunk/MMTk/src/org/mmtk/utility/alloc/Allocator.java =================================================================== --- rvmroot/trunk/MMTk/src/org/mmtk/utility/alloc/Allocator.java 2007-06-22 07:02:52 UTC (rev 12763) +++ rvmroot/trunk/MMTk/src/org/mmtk/utility/alloc/Allocator.java 2007-06-22 07:47:54 UTC (rev 12764) @@ -15,6 +15,7 @@ import org.mmtk.plan.Plan; import org.mmtk.policy.Space; import org.mmtk.utility.*; +import org.mmtk.utility.options.Options; import org.mmtk.utility.statistics.*; import org.mmtk.vm.VM; @@ -259,16 +260,18 @@ current = VM.activePlan.mutator().getOwnAllocator(current); } } - Log.write("GC Warning: Possible VM range imbalance - Allocator.allocSlow failed on request of "); - Log.write(bytes); - Log.write(" on space "); - Log.writeln(Plan.getSpaceNameFromAllocatorAnyLocal(this)); - Log.write("gcCountStart = "); - Log.writeln(gcCountStart); - Log.write("gcCount (now) = "); - Log.writeln(Stats.gcCount()); - Space.printUsageMB(); - VM.assertions.dumpStack(); + if (Options.verbose.getValue() >= 1) { + Log.write("GC Warning: Possible VM range imbalance - Allocator.allocSlow failed on request of "); + Log.write(bytes); + Log.write(" on space "); + Log.writeln(Plan.getSpaceNameFromAllocatorAnyLocal(this)); + Log.write("gcCountStart = "); + Log.writeln(gcCountStart); + Log.write("gcCount (now) = "); + Log.writeln(Stats.gcCount()); + Space.printUsageMB(); + VM.assertions.dumpStack(); + } VM.assertions.failWithOutOfMemoryError(); /* NOTREACHED */ return Address.zero(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dgr...@us...> - 2007-08-30 13:59:49
|
Revision: 13415 http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=13415&view=rev Author: dgrove-oss Date: 2007-08-30 06:59:36 -0700 (Thu, 30 Aug 2007) Log Message: ----------- add missing svn properties. Property Changed: ---------------- rvmroot/trunk/MMTk/src/org/mmtk/utility/options/PerfMetric.java rvmroot/trunk/MMTk/src/org/mmtk/utility/statistics/PerfCounter.java Property changes on: rvmroot/trunk/MMTk/src/org/mmtk/utility/options/PerfMetric.java ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Property changes on: rvmroot/trunk/MMTk/src/org/mmtk/utility/statistics/PerfCounter.java ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |