下方代码会将申请到的50%JVM占用,比如输入1500m,那么会占用600-700mb
package com.project;
import java.io.IOException;
public class MemoryAllocator {
public static void main(String[] args) {
try {
// 假设我们不知道JVM的堆内存大小,但我们想要尽可能多地占用它
// 注意:这里我们使用Runtime.getRuntime().maxMemory()来获取JVM试图使用的最大内存量
// 但这通常不是物理内存的10%,而是JVM堆内存的限制
long maxMemory = Runtime.getRuntime().maxMemory();
long memoryToAllocate = maxMemory / 2; // 我们可以尝试分配一半的最大内存作为示例
// 检查是否超过了Integer.MAX_VALUE,因为数组大小是int类型
if (memoryToAllocate > Integer.MAX_VALUE) {
memoryToAllocate = Integer.MAX_VALUE;
System.out.println("Memory to allocate exceeds Integer.MAX_VALUE. Adjusting to Integer.MAX_VALUE.");
}
// 分配内存
byte[] memoryBlock = new byte[(int) memoryToAllocate];
// 为了防止JVM立即回收这块内存,我们可以将其引用保持在一个静态变量中
// 但在这个例子中,只要main方法不结束,JVM就不会回收它
// 输出分配的内存大小
System.out.println("Allocated memory block size: " + memoryBlock.length / (1024 * 1024) + " MB");
while(true){
Thread.sleep(3000);
}
} catch (OutOfMemoryError | InterruptedException e) {
System.err.println("Out of memory error! Unable to allocate the desired amount of memory.");
}
}
}
运行命令
java -Xmx1500m -jar spXXXXrver.jar &