| /* |
| * This file is part of the Jikes RVM project (http://jikesrvm.org). |
| * |
| * This file is licensed to You under the Eclipse Public License (EPL); |
| * 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/eclipse-1.0.php |
| * |
| * See the COPYRIGHT.txt file distributed with this work for information |
| * regarding copyright ownership. |
| */ |
| package org.mmtk.policy.immix; |
| |
| import static org.mmtk.policy.Space.BYTES_IN_CHUNK; |
| import static org.mmtk.policy.Space.LOG_BYTES_IN_CHUNK; |
| import static org.mmtk.utility.Constants.LOG_BYTES_IN_PAGE; |
| |
| import org.mmtk.plan.Plan; |
| import org.mmtk.vm.VM; |
| import org.vmmagic.unboxed.Word; |
| |
| public class ImmixConstants { |
| // TODO(ngeoffray): Inform MMTk developers that using Plan here is not wise |
| // due to clinit order. |
| // public static final boolean BUILD_FOR_STICKYIMMIX = Plan.NEEDS_LOG_BIT_IN_HEADER; |
| public static final boolean BUILD_FOR_STICKYIMMIX = VM.activePlan.constraints().needsLogBitInHeader(); |
| |
| /* start temporary experimental constants --- should not be allowed to lurk longer than necessary */ |
| public static final int TMP_MIN_SPILL_THRESHOLD = 2; |
| public static final boolean TMP_PREFER_COPY_ON_NURSERY_GC = true; |
| /* end temporary experimental constants */ |
| |
| static final byte MAX_LINE_MARK_STATE = 127; |
| static final byte RESET_LINE_MARK_STATE = 1; |
| |
| public static final boolean MARK_LINE_AT_SCAN_TIME = true; // else do it at mark time |
| |
| public static final boolean SANITY_CHECK_LINE_MARKS = false && VM.VERIFY_ASSERTIONS; |
| |
| public static final float DEFAULT_LINE_REUSE_RATIO = (float) 0.99; |
| public static final float DEFAULT_DEFRAG_LINE_REUSE_RATIO = (float) 0.99; |
| public static final float DEFAULT_SIMPLE_SPILL_THRESHOLD = (float) 0.25; |
| public static final int DEFAULT_DEFRAG_HEADROOM = 0; // number of pages. |
| public static final float DEFAULT_DEFRAG_HEADROOM_FRACTION = (float) 0.020; |
| public static final int DEFAULT_DEFRAG_FREE_HEADROOM = 0; // number of pages. This should only deviate from zero for analytical purposes. Otherwise the defragmenter is cheating! |
| public static final float DEFAULT_DEFRAG_FREE_HEADROOM_FRACTION = (float) 0.0; |
| /* sizes etc */ |
| static final int LOG_BYTES_IN_BLOCK = (LOG_BYTES_IN_PAGE > 15 ? LOG_BYTES_IN_PAGE : 15); |
| public static final int BYTES_IN_BLOCK = 1<<LOG_BYTES_IN_BLOCK; |
| static final int LOG_PAGES_IN_BLOCK = LOG_BYTES_IN_BLOCK - LOG_BYTES_IN_PAGE; |
| static final int PAGES_IN_BLOCK = 1<<LOG_PAGES_IN_BLOCK; |
| static final int LOG_BLOCKS_IN_CHUNK = LOG_BYTES_IN_CHUNK-LOG_BYTES_IN_BLOCK; |
| static final int BLOCKS_IN_CHUNK = 1<<LOG_BLOCKS_IN_CHUNK; |
| |
| public static final int LOG_BYTES_IN_LINE = 8; |
| static final int LOG_LINES_IN_BLOCK = LOG_BYTES_IN_BLOCK - LOG_BYTES_IN_LINE; |
| public static final short LINES_IN_BLOCK = (short) (1<<LOG_LINES_IN_BLOCK); |
| static final int LOG_LINES_IN_CHUNK = LOG_BYTES_IN_CHUNK - LOG_BYTES_IN_LINE; |
| static final int LINES_IN_CHUNK = 1<<LOG_LINES_IN_CHUNK; |
| |
| public static final int BYTES_IN_LINE = 1<<LOG_BYTES_IN_LINE; |
| |
| public static final int MAX_IMMIX_OBJECT_BYTES = BYTES_IN_BLOCK>>1; |
| |
| private static final int LOG_BLOCKS_IN_RECYCLE_ALLOC_CHUNK = 4; // 3 + 15 -> 19 (512KB) |
| private static final int LOG_BYTES_IN_RECYCLE_ALLOC_CHUNK = LOG_BLOCKS_IN_RECYCLE_ALLOC_CHUNK + LOG_BYTES_IN_BLOCK; |
| static final int BYTES_IN_RECYCLE_ALLOC_CHUNK = 1<<LOG_BYTES_IN_RECYCLE_ALLOC_CHUNK; |
| |
| public static final short MAX_BLOCK_MARK_STATE = LINES_IN_BLOCK; |
| static final short MAX_CONSV_SPILL_COUNT = (short) (LINES_IN_BLOCK/2); |
| public static final short SPILL_HISTOGRAM_BUCKETS = (short) (MAX_CONSV_SPILL_COUNT + 1); |
| public static final short MARK_HISTOGRAM_BUCKETS = (short) (LINES_IN_BLOCK + 1); |
| static final short MAX_COLLECTORS = 16; // nothing special here---we can increase this at the cost of a few hundred bites at build time. |
| |
| public static final Word RECYCLE_ALLOC_CHUNK_MASK = Word.fromIntZeroExtend(BYTES_IN_RECYCLE_ALLOC_CHUNK - 1); |
| protected static final Word CHUNK_MASK = Word.fromIntZeroExtend(BYTES_IN_CHUNK - 1); |
| public static final Word BLOCK_MASK = Word.fromIntZeroExtend(BYTES_IN_BLOCK - 1); |
| protected static final Word LINE_MASK = Word.fromIntZeroExtend(BYTES_IN_LINE - 1); |
| |
| } |