jvm堆溢出和栈溢出

一、jvm堆溢出

1、介绍

在jvm运行java程序时,如果程序运行所需要的内存大于系统的堆最大内存(-Xmx),就会出现堆溢出问题。

2、案例

//介绍:执行该段代码需要大于10m内存空间

public classHeadOverflow {public static voidmain(String[] args) {

List listObj = new ArrayList();for(int i=0; i<10; i++){

Byte[] bytes= new Byte[1*1024*1024];

listObj.add(bytes);

}

System.out.println("添加success");

}

}//设置该程序的jvm参数信息

-Xms1m -Xmx10m -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError

初始堆内存和最大可以堆内存 Gc详细日志信息

3、总结

在正式项目部署环境程序默认读取的是系统的内存,一般设置程序的堆初始内存(-Xms) == 堆最大可用内存(-Xmx)。

二、jvm栈溢出

1、介绍

a、线程请求的栈深度大于虚拟机允许的最大深度 StackOverflowError

b、虚拟机在扩展栈深度时,无法申请到足够的内存空间 OutOfMemoryError

理解:每次方法调用都会有一个栈帧压入虚拟机栈,操作系统给JVM分配的内存是有限的,JVM分配给“虚拟机栈”的内存是有限的。如果方法调用过多,导致虚拟机栈满了就会溢出。这里栈深度就是指栈帧的数量。https://www.cnblogs.com/lovlife/articles/12452502.html

2、案例

//循环递归调用,一直达到jvm的最大深度

public classStackOverflow {private static intcount;public static voidcount(){try{

count++;

count();

}catch(Throwable e) {

System.out.println("最大深度:"+count);

e.printStackTrace();

}

}public static voidmain(String[] args) {

count();

}

}

调整jvm 栈大小

C:\Users\rocky fang\Documents\mycode>java -Xss2m -cp "C:\Users\rocky fang\Documents\mycode" JavaStackTest

java.lang.StackOverflowError

stack height:23345

C:\Users\rocky fang\Documents\mycode>java -Xss5m -cp "C:\Users\rocky fang\Documents\mycode" JavaStackTest

java.lang.StackOverflowError

stack height:93213

C:\Users\rocky fang\Documents\mycode>java -Xss10m -cp "C:\Users\rocky fang\Documents\mycode" JavaStackTest

java.lang.StackOverflowError

stack height:423618

设置-Xss5m设置最大调用深度后调用

总结:每个计算机都会有一个极限最大调用深度,避免递归在代码中无限循环。

局部变量表内容越多,栈帧越大,栈深度越小。

三、内存溢出和内存泄露

1、区别

内存溢出:申请内存空间,超出最大堆内存空间。

内存泄露:其实包含内存溢出,堆内存空间被无用对象占用没有及时释放,导致占用内存,最终导致内存泄露。

情况:静态static修饰对象。

解决:减少常量的定义(具体看服务器内存情况)

原文链接:https://blog.csdn.net/coderyin/article/details/99546338

java栈堆溢出怎么解决_JVM之栈溢出和堆溢出相关推荐

  1. java 内存溢出 内存泄露_JVM——内存泄漏与内存溢出

    1.内存溢出 1.1 什么是Java的内存溢出? 在Java程序运行的过程中,经常会碰到以下错误:java.lang.OutOfMemoryError. 通俗讲,内存溢出是指程序在申请内存时,没有足够 ...

  2. Java架构学习(十二)java内存结构新生代老年代JVM参数调优堆内存参数配置解决堆栈溢出

    JVM参数调优与垃圾回收机制 一.java内存结构 Java内存模型:是多线程里面的,jmm与线程可见性有关 Java内存结构:是JVM虚拟机存储空间. Java内存结构图 Java内存机构分为:方法 ...

  3. 46栈内存溢出、内存区域(程序计数器、Java 虚拟机栈、本地方法栈、Java 堆、方法区、直接内存、内存溢出)与内存溢出(对象实例化分析)

    46.什么情况下会发生栈内存溢出 46.1.Java 内存区域与内存溢出 46.1.1.内存区域 46.1.1.1.程序计数器 46.1.1.2.Java 虚拟机栈 46.1.1.3.本地方法栈 46 ...

  4. Java常见的几种内存溢出及解决方法

    Java常见的几种内存溢出及解决方法[情况一]: java.lang.OutOfMemoryError:Javaheapspace:这种是java堆内存不够,一个原因是真不够(如递归的层数太多等),另 ...

  5. java栈的底层实现_JVM 底层原理总结

    JAVA虚拟机: 一.如上图所示,JAVA虚拟机运行时主要由以下三个部分构成: A. 本地库接口 负责把描述类的数据从Class文件加载到内存,并对数据进行校验.装换解析.以及初始化,最终形成可以被虚 ...

  6. java堆是gc管理_JVM内存管理及GC机制

    一.概述 JavaGC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代码,对内存泄露和 ...

  7. 基于Java内存溢出的解决方法详解

    一.内存溢出类型 1.java.lang.OutOfMemoryError: PermGen space JVM管理两种类型的内存,堆和非堆.堆是给开发人员用的上面说的就是,是在JVM启动时创建:非堆 ...

  8. Java内存溢出及解决:OutOfMemoryError 和 StackOverflowError

    一.OutOfMemoryError 和 StackOverflowError 1️⃣堆区域用来存放 Class 的实例(即对象),对象需要存储的内容主要是非静态属性.每次用 new 创建一个对象实例 ...

  9. java栈、堆、方法区

    1.java中的栈(stack)和堆(heap)是java在内存(ram)中存放数据的地方 2.堆区 存储的全部是对象,每个对象都包含一个与之对应的class的信息.(class的目的是得到操作指令) ...

最新文章

  1. 2021年春季学期-信号与系统-第六次作业参考答案
  2. Mysql 死锁过程及案例详解之用户自定义锁
  3. Android高仿大众点评(带服务端)
  4. 华三ospf联动bfd_HCIE2020__路由交换专家__BFD综合实验
  5. hive函数大全:11大类、109个函数
  6. js变量后面加问号是什么_JS变量生命周期:为什么 let 没有被提升
  7. python 内存管理
  8. 表单单选多选项清除默认样式小技巧
  9. 动态生成ContextMenuStrip
  10. Pyqt5_Python运用过程中一些问题和技巧
  11. 有关 !DOCTYPE HTML
  12. jdk版本低于1.7 waterdrop 打不开解决
  13. java concurrent 线程通信_java并发之线程间通信
  14. php中js中文传值乱码,php解析JSON中文乱码问题的解决方法
  15. C Sharp进行附合水准路线计算中间点高程简易程序
  16. 私人智库呼吁瑞士国家银行开发瑞士法郎代币,拥抱DLT技术
  17. 服务器有固态盘系统安装,服务器有装固态硬盘吗
  18. 利用CompletableFuture集齐7龙珠
  19. JAVASE高级部分
  20. [JavaSE基础笔记]Day10 石头迷阵实现

热门文章

  1. 备忘录这三个字怎么改名字_苹果语言备忘录怎么改名字
  2. 强烈推荐四款高效率办公软件
  3. Brightcove发布新的移动应用以简化员工视频沟通
  4. 教你四步配置Hugo环境
  5. 25岁竟要求产品经验10年?我一直以为是个段子,没想到居然是真的
  6. 大白话讲解MySQL 索引,页分裂,行溢出,事务
  7. 【TWS API使用教程5】---如何使用TWS API在盈透证券中下单(place order)、获取订单信息、获取持仓、获取账户汇总信息?
  8. JS 不常用的一些Array方法
  9. 俄乌局势再起波澜,3月季节性一览,甲醇认购大涨,CCS05收官LPP季节性下跌2022.2.28
  10. 深度信念网络与受限玻尔兹曼机