Skip to content

Commit e9daa58

Browse files
[GR-52941] GC-related cleanups.
PullRequest: graal/17377
2 parents 5e43646 + 9d5c3bf commit e9daa58

File tree

10 files changed

+12
-49
lines changed

10 files changed

+12
-49
lines changed

substratevm/src/com.oracle.svm.core.genscavenge/src/com/oracle/svm/core/genscavenge/AlignedHeapChunk.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
import com.oracle.svm.core.Uninterruptible;
3434
import com.oracle.svm.core.genscavenge.remset.RememberedSet;
3535
import com.oracle.svm.core.heap.ObjectVisitor;
36-
import com.oracle.svm.core.os.CommittedMemoryProvider;
3736
import com.oracle.svm.core.util.PointerUtils;
3837

3938
import jdk.graal.compiler.api.directives.GraalDirectives;
@@ -121,7 +120,7 @@ public static AlignedHeader getEnclosingChunk(Object obj) {
121120
@Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true)
122121
public static AlignedHeader getEnclosingChunkFromObjectPointer(Pointer ptr) {
123122
if (!GraalDirectives.inIntrinsic()) {
124-
assert !HeapImpl.getHeapImpl().isInImageHeap(ptr) || CommittedMemoryProvider.get().guaranteesHeapPreferredAddressSpaceAlignment() : "can't be used because the image heap is unaligned";
123+
assert HeapImpl.isImageHeapAligned() || !HeapImpl.getHeapImpl().isInImageHeap(ptr) : "can't be used because the image heap is unaligned";
125124
}
126125
return (AlignedHeader) PointerUtils.roundDown(ptr, HeapParameters.getAlignedHeapChunkAlignment());
127126
}

substratevm/src/com.oracle.svm.core.genscavenge/src/com/oracle/svm/core/genscavenge/HeapImpl.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,6 @@
7575
import com.oracle.svm.core.nodes.CFunctionEpilogueNode;
7676
import com.oracle.svm.core.nodes.CFunctionPrologueNode;
7777
import com.oracle.svm.core.option.RuntimeOptionKey;
78-
import com.oracle.svm.core.os.CommittedMemoryProvider;
7978
import com.oracle.svm.core.snippets.KnownIntrinsics;
8079
import com.oracle.svm.core.thread.PlatformThreads;
8180
import com.oracle.svm.core.thread.ThreadStatus;
@@ -407,9 +406,9 @@ public static boolean usesImageHeapCardMarking() {
407406
if (enabled == Boolean.FALSE || enabled == null && !SubstrateOptions.useRememberedSet()) {
408407
return false;
409408
} else if (enabled == null) {
410-
return CommittedMemoryProvider.get().guaranteesHeapPreferredAddressSpaceAlignment();
409+
return isImageHeapAligned();
411410
}
412-
UserError.guarantee(CommittedMemoryProvider.get().guaranteesHeapPreferredAddressSpaceAlignment(),
411+
UserError.guarantee(isImageHeapAligned(),
413412
"Enabling option %s requires a custom image heap alignment at runtime, which cannot be ensured with the current configuration (option %s might be disabled)",
414413
SerialGCOptions.ImageHeapCardMarking, SubstrateOptions.SpawnIsolates);
415414
return true;
@@ -424,7 +423,7 @@ public int getPreferredAddressSpaceAlignment() {
424423
@Fold
425424
@Override
426425
public int getImageHeapOffsetInAddressSpace() {
427-
if (SubstrateOptions.SpawnIsolates.getValue() && SubstrateOptions.UseNullRegion.getValue() && CommittedMemoryProvider.get().guaranteesHeapPreferredAddressSpaceAlignment()) {
426+
if (SubstrateOptions.SpawnIsolates.getValue() && SubstrateOptions.UseNullRegion.getValue()) {
428427
/*
429428
* The image heap will be mapped in a way that there is a memory protected gap between
430429
* the heap base and the start of the image heap. The gap won't need any memory in the
@@ -435,6 +434,11 @@ public int getImageHeapOffsetInAddressSpace() {
435434
return 0;
436435
}
437436

437+
@Fold
438+
public static boolean isImageHeapAligned() {
439+
return SubstrateOptions.SpawnIsolates.getValue();
440+
}
441+
438442
@Override
439443
public boolean walkImageHeapObjects(ObjectVisitor visitor) {
440444
VMOperation.guaranteeInProgressAtSafepoint("Must only be called at a safepoint");

substratevm/src/com.oracle.svm.core.genscavenge/src/com/oracle/svm/core/genscavenge/HeapVerifier.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@
4444
import com.oracle.svm.core.hub.DynamicHub;
4545
import com.oracle.svm.core.hub.InteriorObjRefWalker;
4646
import com.oracle.svm.core.log.Log;
47-
import com.oracle.svm.core.os.CommittedMemoryProvider;
4847
import com.oracle.svm.core.snippets.KnownIntrinsics;
4948

5049
import jdk.graal.compiler.word.Word;
@@ -265,7 +264,7 @@ private static boolean verifyObject(Object obj, AlignedHeader aChunk, UnalignedH
265264

266265
assert aChunk.isNonNull() ^ uChunk.isNonNull();
267266
HeapChunk.Header<?> chunk = aChunk.isNonNull() ? aChunk : uChunk;
268-
if (CommittedMemoryProvider.get().guaranteesHeapPreferredAddressSpaceAlignment()) {
267+
if (HeapImpl.isImageHeapAligned() || !HeapImpl.getHeapImpl().isInImageHeap(obj)) {
269268
HeapChunk.Header<?> enclosingHeapChunk = HeapChunk.getEnclosingHeapChunk(obj);
270269
if (chunk.notEqual(enclosingHeapChunk)) {
271270
Log.log().string("Object ").zhex(ptr).string(" should have ").zhex(chunk).string(" as its enclosing chunk but getEnclosingHeapChunk returned ").zhex(enclosingHeapChunk).newline();

substratevm/src/com.oracle.svm.core.genscavenge/src/com/oracle/svm/core/genscavenge/UnalignedHeapChunk.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@
3434
import com.oracle.svm.core.config.ConfigurationValues;
3535
import com.oracle.svm.core.genscavenge.remset.RememberedSet;
3636
import com.oracle.svm.core.heap.ObjectVisitor;
37-
import com.oracle.svm.core.os.CommittedMemoryProvider;
3837
import com.oracle.svm.core.util.UnsignedUtils;
3938

4039
import jdk.graal.compiler.api.directives.GraalDirectives;
@@ -131,7 +130,7 @@ public static UnalignedHeader getEnclosingChunk(Object obj) {
131130
@Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true)
132131
static UnalignedHeader getEnclosingChunkFromObjectPointer(Pointer ptr) {
133132
if (!GraalDirectives.inIntrinsic()) {
134-
assert !HeapImpl.getHeapImpl().isInImageHeap(ptr) || CommittedMemoryProvider.get().guaranteesHeapPreferredAddressSpaceAlignment() : "can't be used because the image heap is unaligned";
133+
assert HeapImpl.isImageHeapAligned() || !HeapImpl.getHeapImpl().isInImageHeap(ptr) : "can't be used for the image heap because the image heap is not aligned to the chunk size";
135134
}
136135
Pointer chunkPointer = ptr.subtract(getObjectStartOffset());
137136
return (UnalignedHeader) chunkPointer;

substratevm/src/com.oracle.svm.core.posix/src/com/oracle/svm/core/posix/linux/LinuxImageHeapProvider.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -96,11 +96,6 @@ public class LinuxImageHeapProvider extends AbstractImageHeapProvider {
9696

9797
private static final int MAX_PATHLEN = 4096;
9898

99-
@Override
100-
public boolean guaranteesHeapPreferredAddressSpaceAlignment() {
101-
return true;
102-
}
103-
10499
@Override
105100
@Uninterruptible(reason = "Called during isolate initialization.")
106101
public int initialize(Pointer reservedAddressSpace, UnsignedWord reservedSize, WordPointer basePointer, WordPointer endPointer) {

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/heap/Heap.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@
4444
import com.oracle.svm.core.identityhashcode.IdentityHashCodeSupport;
4545
import com.oracle.svm.core.log.Log;
4646
import com.oracle.svm.core.option.RuntimeOptionKey;
47-
import com.oracle.svm.core.os.CommittedMemoryProvider;
4847

4948
import jdk.graal.compiler.api.replacements.Fold;
5049

@@ -137,11 +136,7 @@ public void visitLoadedClasses(Consumer<Class<?>> visitor) {
137136
/** Reset the heap to the normal execution state. */
138137
public abstract void endSafepoint();
139138

140-
/**
141-
* Returns a multiple to which the heap address space should be aligned to at runtime.
142-
*
143-
* @see CommittedMemoryProvider#guaranteesHeapPreferredAddressSpaceAlignment()
144-
*/
139+
/** Returns a multiple to which the heap address space should be aligned to at runtime. */
145140
@Fold
146141
public abstract int getPreferredAddressSpaceAlignment();
147142

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/os/AbstractCommittedMemoryProvider.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,6 @@
4545
import jdk.graal.compiler.api.replacements.Fold;
4646

4747
public abstract class AbstractCommittedMemoryProvider implements CommittedMemoryProvider {
48-
@Fold
49-
@Override
50-
public boolean guaranteesHeapPreferredAddressSpaceAlignment() {
51-
return SubstrateOptions.SpawnIsolates.getValue() && ImageHeapProvider.get().guaranteesHeapPreferredAddressSpaceAlignment();
52-
}
53-
5448
@Uninterruptible(reason = "Still being initialized.")
5549
protected static int protectSingleIsolateImageHeap() {
5650
assert !SubstrateOptions.SpawnIsolates.getValue() : "Must be handled by ImageHeapProvider when SpawnIsolates is enabled";

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/os/AbstractCopyingImageHeapProvider.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,6 @@
4444
import com.oracle.svm.core.util.UnsignedUtils;
4545

4646
public abstract class AbstractCopyingImageHeapProvider extends AbstractImageHeapProvider {
47-
@Override
48-
public boolean guaranteesHeapPreferredAddressSpaceAlignment() {
49-
return true;
50-
}
51-
5247
@Override
5348
@Uninterruptible(reason = "Called during isolate initialization.")
5449
public int initialize(Pointer reservedAddressSpace, UnsignedWord reservedSize, WordPointer basePointer, WordPointer endPointer) {

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/os/CommittedMemoryProvider.java

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232

3333
import com.oracle.svm.core.Uninterruptible;
3434
import com.oracle.svm.core.c.function.CEntryPointCreateIsolateParameters;
35-
import com.oracle.svm.core.heap.Heap;
3635

3736
import jdk.graal.compiler.api.replacements.Fold;
3837

@@ -46,14 +45,6 @@ static CommittedMemoryProvider get() {
4645
return ImageSingletons.lookup(CommittedMemoryProvider.class);
4746
}
4847

49-
/**
50-
* Returns whether this provider will always guarantee a heap address space alignment of
51-
* {@link Heap#getPreferredAddressSpaceAlignment()} at image runtime, which may also depend on
52-
* {@link ImageHeapProvider#guaranteesHeapPreferredAddressSpaceAlignment()}.
53-
*/
54-
@Fold
55-
boolean guaranteesHeapPreferredAddressSpaceAlignment();
56-
5748
/**
5849
* Performs initializations <em>for the current isolate</em>, before any other methods of this
5950
* interface may be called.

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/os/ImageHeapProvider.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -56,14 +56,6 @@ static ImageHeapProvider get() {
5656
return ImageSingletons.lookup(ImageHeapProvider.class);
5757
}
5858

59-
/**
60-
* Returns whether this provider, when not already supplied a reserved address space by
61-
* {@link CommittedMemoryProvider}, will always ensure a heap address space alignment of
62-
* {@link Heap#getPreferredAddressSpaceAlignment()} at image runtime.
63-
*/
64-
@Fold
65-
boolean guaranteesHeapPreferredAddressSpaceAlignment();
66-
6759
/**
6860
* Creates a new instance of the image heap.
6961
*

0 commit comments

Comments
 (0)