目录

一、堆空间大小设置

二、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)相关推荐

  1. IBM JDK的Java堆空间的碎片问题

    欢迎大家访问我的个人网站 萌萌的IT人,后续所有的文章都会在此发布 ------------------------------------------------------------------ ...

  2. OOM系列之一:java.lang.OutOfMemoryError: Java堆空间问题详解

    第一篇:java.lang.OutOfMemoryError: Java heap space Java 应用程序只允许使用有限的内存量.此限制是在应用程序启动期间指定的.为了让事情变得更复杂,Jav ...

  3. OutOfMemoryError:Java堆空间–分析和解决方法

    java.lang.OutOfMemoryError:Java堆问题是在支持或开发复杂的Java EE应用程序时可能会遇到的最复杂的问题之一. 这篇简短的文章将为您提供此JVM HotSpot Out ...

  4. Java堆空间,本机堆和内存问题

    最近,我在和一个朋友讨论为什么Java进程使用的内存比启动Java进程时设置的最大堆多. 代码创建的所有Java对象都是在Java堆空间内创建的,其大小由-Xmx选项定义. 但是一个Java进程由很多 ...

  5. 一步步优化JVM四:决定Java堆的大小以及内存占用

    到目前为止,还没有做明确的优化工作.只是做了初始化选择工作,比如说:JVM部署模型.JVM运行环境.收集哪些垃圾回收器的信息以及需要遵守垃圾回收原则.这一步将介绍如何评估应用需要的内存大小以及Java ...

  6. Java堆空间(Heap Space)

    Java 堆空间(Heap Space) 概述 在Java程序中,堆是JVM内存空间中最大的一块,同时我们知道,每个线程都拥有一个虚拟机栈,但是堆不同,Java堆是被所有线程共享的一块内存区域,在虚拟 ...

  7. java堆空间(内存)

    当Java程序开始运行时,JVM会从操作系统获取一些内存.JVM使用这些内存,这些内存的一部分就是堆内存.堆内存通常在存储地址的底层,向上排列.当一个对象通过new关键字或通过其他方式创建后,对象从堆 ...

  8. JVM优化:决定Java堆的大小以及内存占用

    转载:https://blog.csdn.net/zhoutao198712/article/details/7783070    到目前为止,还没有做明确的优化工作.只是做了初始化选择工作,比如说: ...

  9. Java 堆空间(Heap Space)

    Java 堆空间(Heap Space) 概述 在Java程序中,堆是JVM内存空间中最大的一块,同时我们知道,每个线程都拥有一个虚拟机栈,但是堆不同,Java堆是被所有线程共享的一块内存区域,在虚拟 ...

最新文章

  1. CNN加速器设计新突破,逼近能效理论极限
  2. razor中@相对于% %的优势
  3. linux下cmake-gui的安装
  4. M2Crypto/__m2crypto.so: undefined symbol: SSLv3_method
  5. 从《四驱兄弟》到“联想中国”
  6. 多核处理器_英特尔十代酷睿i5-10400大战R5 3600,到底谁是千元处理器一霸?
  7. 金蝶记账王和易记账哪个好_金蝶易记账和记账王的区别是什么?金蝶易记账的具体操作如下...
  8. PLC编程时三个注意事项
  9. win10下能够用的键盘映射工具? win10 下按键像mac一样
  10. 3.3V系统和5V系统电平转换
  11. 一些常用外设DHT11,sg90
  12. 零基础学 Python(17):if 条件语句
  13. 适配器(Adapter)
  14. 完美解决浏览器劫持方法,简单实用百试百灵!
  15. python微信公众号翻译功能怎么用_使用python一步一步搭建微信公众平台(二)----搭建一个中英互译的翻译工具...
  16. NTFS文件系统详解(三)NTFS元文件解析
  17. 护眼灯到底有没有护眼的效果?带你了解市面上的护眼灯真的护眼吗
  18. 32位/64位系统,jdk32位,64位,32/64位jdk编译出来的class和eclipse 32位和64位
  19. SQL注入攻击及防御 手动注入+sqlmap自动化注入实战(网络安全学习12)
  20. OJ每日一练文章目录汇总

热门文章

  1. C语言I———作业07
  2. maya动画制作(4)——小男孩的各种姿态动画制作(修改更新)
  3. Scala-scala数据类型系统
  4. 两张照片怎么拼成一张图片?
  5. Junit单元测试多线程
  6. 暴力破解工具-hydra使用
  7. 计算机网络中的PPPoE协议是做什么用的?
  8. 前端学习vue第三天(到P60)
  9. RetinaNN眼底图像识别项目经历
  10. GBase 8a UDF 函数串并行控制基础知识