Commit 1b187f67a4431395d3deec49cdbac802aff8a5eb
- Diff rendering mode:
- inline
- side by side
|   | |||
| 192 | 192 | * mark&sweep). | |
| 193 | 193 | */ | |
| 194 | 194 | final void majorGC() { | |
| 195 | final long beginTime= GenGCStatistics.currentMillis(); | ||
| 195 | final long beginTime = GenGCStatistics.currentMillis(); | ||
| 196 | 196 | Unsafe.debug("\n[Enter] GenGCManager.majorGC()\n"); | |
| 197 | 197 | // Prepare | |
| 198 | 198 | final VmBootHeap bootHeap = heapManager.getBootHeap(); |
|   | |||
| 74 | 74 | } | |
| 75 | 75 | ||
| 76 | 76 | private String addString(String property, long value, String unit) { | |
| 77 | return property + ": " + value + " " + unit; | ||
| 77 | return property + ": " + value + " " + unit + "\n"; | ||
| 78 | 78 | } | |
| 79 | 79 | ||
| 80 | 80 | private long getOverhead() { |
|   | |||
| 180 | 180 | manager.majorGC(); | |
| 181 | 181 | runMinorNeeded = false; | |
| 182 | 182 | } else { | |
| 183 | Unsafe.debug("GenGCThread.callGc(major)\n"); | ||
| 183 | Unsafe.debug("GenGCThread.callGc(minor)\n"); | ||
| 184 | 184 | manager.minorGC(); | |
| 185 | 185 | runMinorNeeded = false; | |
| 186 | 186 | } |
|   | |||
| 47 | 47 | private final static long youngSpaceTimerTrigger = 2000L; | |
| 48 | 48 | private final static long tenuredSpaceTimerTrigger = 60000L; | |
| 49 | 49 | private final static long sweepTimerTrigger = 5000L; | |
| 50 | private final static int youngSpaceCounterTrigger = 2000; | ||
| 51 | private final static int tenuredSpaceCounterTrigger = 25000; | ||
| 52 | private final static int sweepCounterTrigger = 10000; | ||
| 50 | private final static int youngSpaceCounterTrigger = 100000; | ||
| 51 | private final static int tenuredSpaceCounterTrigger = 250000; | ||
| 52 | private final static int sweepCounterTrigger = 200000; | ||
| 53 | 53 | ||
| 54 | 54 | /** | |
| 55 | 55 | * The GC thread | |
| … | … | ||
| 106 | 106 | intializeGCYoungSpaceTriggers(); | |
| 107 | 107 | intializeGCTenuredSpaceTriggers(); | |
| 108 | 108 | intializeGCSweepTriggers(); | |
| 109 | |||
| 110 | enableGCTriggers(); | ||
| 109 | disableGCTriggers(); | ||
| 111 | 110 | } | |
| 112 | 111 | ||
| 113 | 112 | public void check() { | |
| … | … | ||
| 116 | 116 | } | |
| 117 | 117 | ||
| 118 | 118 | public void enableGCTriggers() { | |
| 119 | gcYoungSpaceCurrentTrigger = gcYoungSpaceRealTrigger; | ||
| 119 | // gcYoungSpaceCurrentTrigger = gcYoungSpaceRealTrigger; | ||
| 120 | 120 | gcTenuredSpaceCurrentTrigger = gcTenuredSpaceRealTrigger; | |
| 121 | 121 | gcSweepCurrentTrigger = gcSweepRealTrigger; | |
| 122 | 122 | reset(); |
|   | |||
| 43 | 43 | import org.jnode.vm.scheduler.VmProcessor; | |
| 44 | 44 | import org.vmmagic.unboxed.Address; | |
| 45 | 45 | import org.vmmagic.unboxed.Extent; | |
| 46 | import org.vmmagic.unboxed.ObjectReference; | ||
| 47 | 46 | import org.vmmagic.unboxed.Word; | |
| 48 | 47 | ||
| 49 | 48 | /** | |
| … | … | ||
| 113 | 113 | ||
| 114 | 114 | private boolean gcActive; | |
| 115 | 115 | ||
| 116 | private boolean gcManagerLoaded = false; | ||
| 117 | |||
| 116 | 118 | /** | |
| 117 | 119 | * Make this private, so we cannot be instantiated | |
| 118 | 120 | */ | |
| … | … | ||
| 153 | 153 | ||
| 154 | 154 | final boolean traceTriggers = (heapFlags & TRACE_TRIGGER) != 0; | |
| 155 | 155 | triggerManager.initialize(gcThread, gcSweepThread, traceTriggers); | |
| 156 | triggerManager.enableGCTriggers(); | ||
| 157 | gcManagerLoaded = true; | ||
| 156 | 158 | Unsafe.debug("GenHeapManager.start(ended)\n"); | |
| 157 | 159 | } | |
| 158 | 160 | ||
| … | … | ||
| 475 | 475 | // Allocated objects are initially black. | |
| 476 | 476 | VmMagic.setObjectFlags(result, Word.fromIntZeroExtend(ObjectFlags.GC_DEFAULT_COLOR)); | |
| 477 | 477 | //add object to young objects | |
| 478 | if (gcManager != null) { | ||
| 478 | if (gcManagerLoaded) { | ||
| 479 | // Unsafe.debug("GenHeapManager.allocObject(young)\n"); | ||
| 479 | 480 | gcManager.addToYoungObjects(result); | |
| 480 | } | ||
| 481 | else { | ||
| 481 | } else { | ||
| 482 | // Unsafe.debug("GenHeapManager.allocObject(old)\n"); | ||
| 482 | 483 | helper.setOld(result); | |
| 483 | 484 | } | |
| 485 | // Unsafe.debug("GenHeapManager.allocObject(done)\n"); | ||
| 484 | 486 | ||
| 485 | 487 | } finally { | |
| 486 | 488 | if (m != null) { | |
| … | … | ||
| 502 | 502 | * @return The heap | |
| 503 | 503 | */ | |
| 504 | 504 | private VmDefaultHeap allocHeap(Extent size, boolean addToHeapList) { | |
| 505 | Unsafe.debug("[begin] allocHeap\n"); | ||
| 505 | // Unsafe.debug("[begin] allocHeap\n"); | ||
| 506 | 506 | final Address start = helper.allocateBlock(size); | |
| 507 | 507 | // final Address start = MemoryBlockManager.allocateBlock(size); | |
| 508 | 508 | if (start == null) { | |
| … | … | ||
| 517 | 517 | if (addToHeapList) { | |
| 518 | 518 | heapList.append(heap); | |
| 519 | 519 | } | |
| 520 | Unsafe.debug("[end successful] allocHeap\n"); | ||
| 520 | // Unsafe.debug("[end successful] allocHeap\n"); | ||
| 521 | 521 | return heap; | |
| 522 | 522 | } | |
| 523 | 523 |
|   | |||
| 98 | 98 | * @param slotSize | |
| 99 | 99 | */ | |
| 100 | 100 | protected final void initializeAbstract(int slotSize) { | |
| 101 | this.headerSize = ObjectLayout.HEADER_SLOTS * slotSize; | ||
| 101 | this.headerSize = (ObjectLayout.HEADER_SLOTS + 3) * slotSize; | ||
| 102 | 102 | this.flagsOffset = Offset.fromIntSignExtend(ObjectLayout.FLAGS_SLOT * slotSize); | |
| 103 | 103 | this.tibOffset = Offset.fromIntSignExtend(ObjectLayout.TIB_SLOT * slotSize); | |
| 104 | 104 | this.ageOffset = Offset.fromIntSignExtend(ObjectLayout.COLLECTION_AGE_SLOT * slotSize); |
|   | |||
| 23 | 23 | import org.jnode.annotation.Inline; | |
| 24 | 24 | import org.jnode.annotation.MagicPermission; | |
| 25 | 25 | import org.jnode.vm.ObjectVisitor; | |
| 26 | import org.jnode.vm.Unsafe; | ||
| 27 | 26 | import org.jnode.vm.VmMagic; | |
| 28 | 27 | import org.jnode.vm.classmgr.ObjectFlags; | |
| 29 | 28 | import org.jnode.vm.classmgr.ObjectLayout; | |
| … | … | ||
| 107 | 107 | final Offset sizeOffset = Offset | |
| 108 | 108 | .fromIntSignExtend(-((ObjectLayout.HEADER_SLOTS + 1) * slotSize)); | |
| 109 | 109 | final Offset flagsOffset = Offset.fromIntSignExtend(ObjectLayout.FLAGS_SLOT * slotSize); | |
| 110 | final Offset ageOffset = Offset.fromIntSignExtend(ObjectLayout.COLLECTION_AGE_SLOT * slotSize); | ||
| 110 | final Offset ageOffset = Offset.fromIntSignExtend(ObjectLayout.COLLECTION_AGE_SLOT | ||
| 111 | * slotSize); | ||
| 111 | 112 | final Offset nbRefOffset = Offset.fromIntSignExtend(ObjectLayout.NB_REFS_SLOT * slotSize); | |
| 112 | 113 | ||
| 113 | 114 | // Setup a heap object, so the heap can initialize itself. |

