Skip to content

Commit 8cb96d0

Browse files
Only support a metaspace if there is a contiguous address space.
Remove unused code.
1 parent d18bce1 commit 8cb96d0

File tree

7 files changed

+24
-46
lines changed

7 files changed

+24
-46
lines changed

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import static jdk.graal.compiler.word.Word.nullPointer;
3232
import static jdk.graal.compiler.word.Word.unsigned;
3333

34+
import org.graalvm.nativeimage.ImageSingletons;
3435
import org.graalvm.nativeimage.Isolate;
3536
import org.graalvm.nativeimage.Platform;
3637
import org.graalvm.nativeimage.Platforms;
@@ -65,6 +66,7 @@
6566
import com.oracle.svm.core.nmt.NativeMemoryTracking;
6667
import com.oracle.svm.core.nmt.NmtCategory;
6768
import com.oracle.svm.core.os.ChunkBasedCommittedMemoryProvider;
69+
import com.oracle.svm.core.os.CommittedMemoryProvider;
6870
import com.oracle.svm.core.os.ImageHeapProvider;
6971
import com.oracle.svm.core.os.VirtualMemoryProvider;
7072
import com.oracle.svm.core.snippets.KnownIntrinsics;
@@ -149,6 +151,11 @@ public AddressRangeCommittedMemoryProvider() {
149151
assert SubstrateOptions.SpawnIsolates.getValue();
150152
}
151153

154+
@Fold
155+
public static AddressRangeCommittedMemoryProvider singleton() {
156+
return (AddressRangeCommittedMemoryProvider) ImageSingletons.lookup(CommittedMemoryProvider.class);
157+
}
158+
152159
@Override
153160
@Uninterruptible(reason = "Still being initialized.")
154161
public int initialize(WordPointer heapBaseOut, IsolateArguments arguments) {

substratevm/src/com.oracle.svm.core.genscavenge/src/com/oracle/svm/core/genscavenge/metaspace/ChunkedMetaspaceMemory.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,14 @@
3434
import org.graalvm.word.UnsignedWord;
3535

3636
import com.oracle.svm.core.Uninterruptible;
37+
import com.oracle.svm.core.genscavenge.AddressRangeCommittedMemoryProvider;
3738
import com.oracle.svm.core.genscavenge.AlignedHeapChunk;
3839
import com.oracle.svm.core.genscavenge.AlignedHeapChunk.AlignedHeader;
3940
import com.oracle.svm.core.genscavenge.HeapChunk.Header;
4041
import com.oracle.svm.core.genscavenge.HeapParameters;
4142
import com.oracle.svm.core.genscavenge.Space;
4243
import com.oracle.svm.core.genscavenge.remset.RememberedSet;
4344
import com.oracle.svm.core.metaspace.Metaspace;
44-
import com.oracle.svm.core.os.ChunkBasedCommittedMemoryProvider;
4545
import com.oracle.svm.core.thread.JavaSpinLockUtils;
4646
import com.oracle.svm.core.thread.VMOperation;
4747
import com.oracle.svm.core.util.VMError;
@@ -129,7 +129,7 @@ private AlignedHeader requestNewChunk() {
129129
assert JavaSpinLockUtils.isLocked(this, LOCK_OFFSET);
130130

131131
UnsignedWord chunkSize = HeapParameters.getAlignedHeapChunkAlignment();
132-
AlignedHeader newChunk = (AlignedHeader) ChunkBasedCommittedMemoryProvider.get().allocateMetaspaceChunk(HeapParameters.getAlignedHeapChunkSize(), chunkSize);
132+
AlignedHeader newChunk = (AlignedHeader) AddressRangeCommittedMemoryProvider.singleton().allocateMetaspaceChunk(HeapParameters.getAlignedHeapChunkSize(), chunkSize);
133133
assert newChunk.isNonNull();
134134

135135
AlignedHeapChunk.initialize(newChunk, chunkSize);

substratevm/src/com.oracle.svm.core.genscavenge/src/com/oracle/svm/core/genscavenge/metaspace/MetaspaceImpl.java

Lines changed: 2 additions & 8 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.log.Log;
4646
import com.oracle.svm.core.metaspace.Metaspace;
47-
import com.oracle.svm.core.os.CommittedMemoryProvider;
4847
import com.oracle.svm.core.thread.VMOperation;
4948

5049
import jdk.graal.compiler.api.replacements.Fold;
@@ -98,13 +97,8 @@ public boolean isInAddressSpace(Object obj) {
9897
@Override
9998
@Uninterruptible(reason = CALLED_FROM_UNINTERRUPTIBLE_CODE, mayBeInlined = true)
10099
public boolean isInAddressSpace(Pointer ptr) {
101-
CommittedMemoryProvider memoryProvider = ImageSingletons.lookup(CommittedMemoryProvider.class);
102-
if (memoryProvider instanceof AddressRangeCommittedMemoryProvider p) {
103-
return p.isInMetaspace(ptr);
104-
}
105-
106-
/* Metaspace does not have a contiguous address space. */
107-
return isInAllocatedMemory(ptr);
100+
AddressRangeCommittedMemoryProvider m = AddressRangeCommittedMemoryProvider.singleton();
101+
return m.isInMetaspace(ptr);
108102
}
109103

110104
@Override

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

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -140,13 +140,6 @@ public void visitLoadedClasses(Consumer<Class<?>> visitor) {
140140
/** Reset the heap to the normal execution state. */
141141
public abstract void endSafepoint();
142142

143-
/* Only used by legacy code, see GR-68813. */
144-
@Fold
145-
@Deprecated
146-
public int getPreferredAddressSpaceAlignment() {
147-
return getHeapBaseAlignment();
148-
}
149-
150143
/**
151144
* Returns the alignment in bytes that the heap base must adhere to at runtime. Note that this
152145
* alignment is not enforced if {@link SubstrateOptions#SpawnIsolates} is disabled.

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/hub/RuntimeClassLoading.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -88,18 +88,26 @@ private static void validateRuntimeClassLoading(HostedOptionKey<Boolean> optionK
8888
if (!optionKey.getValue()) {
8989
return;
9090
}
91+
if (!SubstrateOptions.SpawnIsolates.getValue()) {
92+
/*
93+
* A metaspace is only supported if there is a contiguous address space, which is
94+
* only the case with isolate support enabled.
95+
*/
96+
throw UserError.invalidOptionValue(RuntimeClassLoading, RuntimeClassLoading.getValue(),
97+
"Requires isolate support, please use " + SubstrateOptionsParser.commandArgument(SubstrateOptions.SpawnIsolates, "+"));
98+
}
9199
if (SubstrateOptions.ClosedTypeWorld.getValue()) {
92100
throw UserError.invalidOptionValue(RuntimeClassLoading, RuntimeClassLoading.getValue(),
93-
"Requires an open type world, Please use " + SubstrateOptionsParser.commandArgument(SubstrateOptions.ClosedTypeWorld, "-"));
101+
"Requires an open type world, please use " + SubstrateOptionsParser.commandArgument(SubstrateOptions.ClosedTypeWorld, "-"));
94102
}
95103
if (!ClassForNameSupport.Options.ClassForNameRespectsClassLoader.getValue()) {
96104
throw UserError.invalidOptionValue(RuntimeClassLoading, RuntimeClassLoading.getValue(),
97-
"Requires Class.forName to respect the classloader argument, Please use " +
105+
"Requires Class.forName to respect the classloader argument, please use " +
98106
SubstrateOptionsParser.commandArgument(ClassForNameSupport.Options.ClassForNameRespectsClassLoader, "+"));
99107
}
100108
if (PredefinedClassesSupport.Options.SupportPredefinedClasses.getValue()) {
101109
throw UserError.invalidOptionValue(RuntimeClassLoading, RuntimeClassLoading.getValue(),
102-
"Requires predefined class support to be disabled, Please use " +
110+
"Requires predefined class support to be disabled, please use " +
103111
SubstrateOptionsParser.commandArgument(PredefinedClassesSupport.Options.SupportPredefinedClasses, "-"));
104112
}
105113
}

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

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import com.oracle.svm.core.heap.RestrictHeapAccess;
3838
import com.oracle.svm.core.nmt.NmtCategory;
3939
import com.oracle.svm.core.thread.VMOperation;
40+
import com.oracle.svm.core.util.VMError;
4041

4142
import jdk.graal.compiler.api.replacements.Fold;
4243
import jdk.graal.compiler.word.Word;
@@ -55,11 +56,7 @@ public static ChunkBasedCommittedMemoryProvider get() {
5556
/** Returns a non-null value or throws a pre-allocated exception. */
5657
@Uninterruptible(reason = CALLED_FROM_UNINTERRUPTIBLE_CODE, mayBeInlined = true)
5758
public Pointer allocateMetaspaceChunk(UnsignedWord nbytes, UnsignedWord alignment) {
58-
Pointer result = allocate(nbytes, alignment, false, NmtCategory.Metaspace);
59-
if (result.isNull()) {
60-
throw METASPACE_CHUNK_COMMIT_FAILED;
61-
}
62-
return result;
59+
throw VMError.shouldNotReachHere("Metaspace is only supported if there is a contiguous address space.");
6360
}
6461

6562
/** Returns a non-null value or throws a pre-allocated exception. */

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

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -24,18 +24,12 @@
2424
*/
2525
package com.oracle.svm.core.os;
2626

27-
import static com.oracle.svm.core.Uninterruptible.CALLED_FROM_UNINTERRUPTIBLE_CODE;
28-
2927
import org.graalvm.word.Pointer;
3028
import org.graalvm.word.UnsignedWord;
3129

3230
import com.oracle.svm.core.Uninterruptible;
3331
import com.oracle.svm.core.UnmanagedMemoryUtil;
3432
import com.oracle.svm.core.c.function.CEntryPointErrors;
35-
import com.oracle.svm.core.heap.Heap;
36-
import com.oracle.svm.core.util.UnsignedUtils;
37-
38-
import jdk.graal.compiler.word.Word;
3933

4034
/** Platform independent image heap provider that deep-copies the image heap memory. */
4135
public class CopyingImageHeapProvider extends AbstractCopyingImageHeapProvider {
@@ -45,19 +39,4 @@ protected int copyMemory(Pointer loadedImageHeap, UnsignedWord imageHeapSize, Po
4539
UnmanagedMemoryUtil.copy(loadedImageHeap, newImageHeap, imageHeapSize);
4640
return CEntryPointErrors.NO_ERROR;
4741
}
48-
49-
/**
50-
* Only called from legacy code, see GR-68584. This method does something fundamentally
51-
* different than the method with the same name in {@link AbstractImageHeapProvider}.
52-
*/
53-
@Uninterruptible(reason = CALLED_FROM_UNINTERRUPTIBLE_CODE, mayBeInlined = true)
54-
protected UnsignedWord getImageHeapAddressSpaceSize() {
55-
UnsignedWord pageSize = VirtualMemoryProvider.get().getGranularity();
56-
int imageHeapOffset = Heap.getHeap().getImageHeapOffsetInAddressSpace();
57-
assert imageHeapOffset >= 0;
58-
UnsignedWord size = Word.unsigned(imageHeapOffset);
59-
size = size.add(getImageHeapSizeInFile());
60-
size = UnsignedUtils.roundUp(size, pageSize);
61-
return size;
62-
}
6342
}

0 commit comments

Comments
 (0)