java.lang.OutOfMemoryError: Java heap space JVM内存溢出(堆溢出)

本文通过实例展示了如何触发Java.lang.OutOfMemoryError: Java heap space错误,解释了该错误产生的原因,即内存分配不足。通过调整JVM的-Xms和-Xmx参数来控制堆内存大小,演示了在Eclipse中设置这些参数的方法,并提供了当遇到此类错误时的排查步骤,建议检查并适当地增加堆内存分配以解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我先演示一下jvm内存溢出错误。

package com.sk.jvm;

import java.util.ArrayList;
import java.util.List;

public class Test003 {
	/**
	 * 运行这段代码必须堆内存10m以上
	 * 因为for循环循环了10次,每次生成了1m堆内存大小
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		System.out.println("堆的最大内存"+Runtime.getRuntime().maxMemory()/1024.0/1024+"m");
		System.out.println("堆的可用内存"+Runtime.getRuntime().freeMemory()/1024.0/1024+"m");
		System.out.println("堆的已经使用内存"+Runtime.getRuntime().totalMemory()/1024.0/1024+"m");
		// -Xms1m -Xmx10m -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError
		List<Object> listObject = new ArrayList<>();
		for (int i = 0; i < 10; i++) {
		System.out.println("i:" + i);
		Byte[] bytes = new Byte[1 * 1024 * 1024];
		listObject.add(bytes);
		}
	}
}

运行这段代码必须堆内存10m以上,new 出来的对象存储在堆里面,因为for循环循环了10次,一共new了list10次,每次生成了1m堆内存大小

我然后通过  -Xms1m -Xmx10m设置jvm的初始内存和最大内存(如果不设置的话会有默认的,这里的话默认的内存肯定是可以运行的,所以我把jvm内存设置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值