Java --- 堆空间大小设置与OutOfMemoryError(OOM)
目录
一、堆空间大小设置
二、OutOfMemoryError异常
一、堆空间大小设置
1、Java堆区用于存储Java对象实例,那么堆的大小在JVM启动时就已经设定好了,大家可以通过选项”-Xmx"和"-Xms"来进行设置。
①、“-Xms"用于表示堆区的起始内存,等价于-XX : InitialHeapsize
②、“-Xmx"则用于表示堆区的最大内存,等价于-XX:MaxHeapsize
2、一旦堆区中的内存大小超过“-Xmx"所指定的最大内存时,将会抛出OutOfMemoryError异常。
3、通常会将-Xms和—Xmx两个参数配置相同的值,其目的是为了能够在java垃圾回收机制清理完堆区后不需要重新分隔计算堆区的大小,从而提高性能。
4、默认情况下,初始内存大小:物理电脑内存大小/ 64,最大内存大小:物理电脑内存大小/ 4
参考代码:
public class HeapSpaceInitial {public static void main(String[] args) {//返回Java虚拟机中的堆内存总量long xmsMemory = Runtime.getRuntime().totalMemory() / 1024 / 1024;//返回Java虚拟机中使用的最大堆内存long xmxMemory = Runtime.getRuntime().maxMemory() / 1024 / 1024;System.out.println("-Xms:" + xmsMemory + "M");System.out.println("-Xmx:" + xmxMemory + "M");
// System.out.println("系统内存大小为:" + xmsMemory * 64.0 / 1024 + "G");
// System.out.println("系统内存大小为:" + xmxMemory * 4.0 / 1024 + "G");
// 在使用 -Xms500m -Xmx500m -XX:+PrintGCDetails需要把等待时间代码注释掉
// try {
// Thread.sleep(1000000);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }}
}
在不设置参数情况下,默认堆空间大小:
手动设置参数大小:-Xms500m -Xmx500m 建议将初始堆内存和最大堆内存设置为相同的值。
打印结果:
通过结果发现打印的结果与设置的值出现偏差,进行验证
结果验证:
也可以使用 -Xms500m -Xmx500m -XX:+PrintGCDetails来查看详情信息
二、OutOfMemoryError异常
参考代码:
public class OOMTest {public static void main(String[] args) {ArrayList<Picture> pictures = new ArrayList<>();while (true){try {Thread.sleep(20);} catch (InterruptedException e) {e.printStackTrace();}pictures.add(new Picture(new Random().nextInt(1024 * 1024)));}}
}
class Picture{private byte[] pixels;public Picture(int len) {this.pixels = new byte[len];}
}
异常错误:
可以使用jvisualvm工具分析
Java --- 堆空间大小设置与OutOfMemoryError(OOM)相关推荐
- IBM JDK的Java堆空间的碎片问题
欢迎大家访问我的个人网站 萌萌的IT人,后续所有的文章都会在此发布 ------------------------------------------------------------------ ...
- OOM系列之一:java.lang.OutOfMemoryError: Java堆空间问题详解
第一篇:java.lang.OutOfMemoryError: Java heap space Java 应用程序只允许使用有限的内存量.此限制是在应用程序启动期间指定的.为了让事情变得更复杂,Jav ...
- OutOfMemoryError:Java堆空间–分析和解决方法
java.lang.OutOfMemoryError:Java堆问题是在支持或开发复杂的Java EE应用程序时可能会遇到的最复杂的问题之一. 这篇简短的文章将为您提供此JVM HotSpot Out ...
- Java堆空间,本机堆和内存问题
最近,我在和一个朋友讨论为什么Java进程使用的内存比启动Java进程时设置的最大堆多. 代码创建的所有Java对象都是在Java堆空间内创建的,其大小由-Xmx选项定义. 但是一个Java进程由很多 ...
- 一步步优化JVM四:决定Java堆的大小以及内存占用
到目前为止,还没有做明确的优化工作.只是做了初始化选择工作,比如说:JVM部署模型.JVM运行环境.收集哪些垃圾回收器的信息以及需要遵守垃圾回收原则.这一步将介绍如何评估应用需要的内存大小以及Java ...
- Java堆空间(Heap Space)
Java 堆空间(Heap Space) 概述 在Java程序中,堆是JVM内存空间中最大的一块,同时我们知道,每个线程都拥有一个虚拟机栈,但是堆不同,Java堆是被所有线程共享的一块内存区域,在虚拟 ...
- java堆空间(内存)
当Java程序开始运行时,JVM会从操作系统获取一些内存.JVM使用这些内存,这些内存的一部分就是堆内存.堆内存通常在存储地址的底层,向上排列.当一个对象通过new关键字或通过其他方式创建后,对象从堆 ...
- JVM优化:决定Java堆的大小以及内存占用
转载:https://blog.csdn.net/zhoutao198712/article/details/7783070 到目前为止,还没有做明确的优化工作.只是做了初始化选择工作,比如说: ...
- Java 堆空间(Heap Space)
Java 堆空间(Heap Space) 概述 在Java程序中,堆是JVM内存空间中最大的一块,同时我们知道,每个线程都拥有一个虚拟机栈,但是堆不同,Java堆是被所有线程共享的一块内存区域,在虚拟 ...
最新文章
- CNN加速器设计新突破,逼近能效理论极限
- razor中@相对于% %的优势
- linux下cmake-gui的安装
- M2Crypto/__m2crypto.so: undefined symbol: SSLv3_method
- 从《四驱兄弟》到“联想中国”
- 多核处理器_英特尔十代酷睿i5-10400大战R5 3600,到底谁是千元处理器一霸?
- 金蝶记账王和易记账哪个好_金蝶易记账和记账王的区别是什么?金蝶易记账的具体操作如下...
- PLC编程时三个注意事项
- win10下能够用的键盘映射工具? win10 下按键像mac一样
- 3.3V系统和5V系统电平转换
- 一些常用外设DHT11,sg90
- 零基础学 Python(17):if 条件语句
- 适配器(Adapter)
- 完美解决浏览器劫持方法,简单实用百试百灵!
- python微信公众号翻译功能怎么用_使用python一步一步搭建微信公众平台(二)----搭建一个中英互译的翻译工具...
- NTFS文件系统详解(三)NTFS元文件解析
- 护眼灯到底有没有护眼的效果?带你了解市面上的护眼灯真的护眼吗
- 32位/64位系统,jdk32位,64位,32/64位jdk编译出来的class和eclipse 32位和64位
- SQL注入攻击及防御 手动注入+sqlmap自动化注入实战(网络安全学习12)
- OJ每日一练文章目录汇总