java堆溢出和栈溢出

简介: java堆溢出和栈溢出

一、堆溢出

import java.util.ArrayList;
import java.util.List;
 
public class Demo_071202 {
    public static void main(String[] args) {
        List<Test> list=new ArrayList<>();
        while (true){
            list.add(new Test());
        }
 
    }
    static  class Test{}
}

设置JVM初始堆空间和最大堆空间,堆溢出生成快照。

-Xms20M -Xmx20M -XX:+HeapDumpOnOutOfMemoryError

设置虚拟机参数

java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid21336.hprof ...
Heap dump file created [22149788 bytes in 0.062 secs]
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
  at java.base/java.util.Arrays.copyOf(Arrays.java:3720)
  at java.base/java.util.Arrays.copyOf(Arrays.java:3689)
  at java.base/java.util.ArrayList.grow(ArrayList.java:238)
  at java.base/java.util.ArrayList.grow(ArrayList.java:243)
  at java.base/java.util.ArrayList.add(ArrayList.java:486)
  at java.base/java.util.ArrayList.add(ArrayList.java:499)
  at com.demo.controller.Demo_071202.main(Demo_071202.java:10)

二、栈溢出

public class Demo_071203 {
    public static void main(String[] args) {
        test();
    }
    public static void test(){
        test();
    }
}
Exception in thread "main" java.lang.StackOverflowError
  at com.demo.controller.Demo_071203.test(Demo_071203.java:8)
  at com.demo.controller.Demo_071203.test(Demo_071203.java:8)
  at com.demo.controller.Demo_071203.test(Demo_071203.java:8)
  at com.demo.controller.Demo_071203.test(Demo_071203.java:8)
  at com.demo.controller.Demo_071203.test(Demo_071203.java:8)
  at com.demo.controller.Demo_071203.test(Demo_071203.java:8)
  at com.demo.controller.Demo_071203.test(Demo_071203.java:8)
  at com.demo.controller.Demo_071203.test(Demo_071203.java:8)
  at com.demo.controller.Demo_071203.test(Demo_071203.java:8)
  at com.demo.controller.Demo_071203.test(Demo_071203.java:8)
  at com.demo.controller.Demo_071203.test(Demo_071203.java:8)
  at com.demo.controller.Demo_071203.test(Demo_071203.java:8)
  at com.demo.controller.Demo_071203.test(Demo_071203.java:8)

 

相关文章
|
4月前
|
Java
【Java基础面试三十二】、new String(“abc“) 是去了哪里,仅仅是在堆里面吗?
这篇文章解释了Java中使用`new String("abc")`时,JVM会将字符串直接量"abc"存入常量池,并在堆内存中创建一个新的String对象,该对象会指向常量池中的字符串直接量。
|
4月前
|
存储 算法 Java
惊!Java程序员必看:JVM调优揭秘,堆溢出、栈溢出如何巧妙化解?
【8月更文挑战第29天】在Java领域,JVM是代码运行的基础,但需适当调优以发挥最佳性能。本文探讨了JVM中常见的堆溢出和栈溢出问题及其解决方法。堆溢出发生在堆空间不足时,可通过增加堆空间、优化代码及释放对象解决;栈溢出则因递归调用过深或线程过多引起,调整栈大小、优化算法和使用线程池可有效应对。通过合理配置和调优JVM,可确保Java应用稳定高效运行。
151 4
|
27天前
|
存储 算法 Java
Java 内存管理与优化:掌控堆与栈,雕琢高效代码
Java内存管理与优化是提升程序性能的关键。掌握堆与栈的运作机制,学习如何有效管理内存资源,雕琢出更加高效的代码,是每个Java开发者必备的技能。
53 5
|
4月前
|
存储 算法 Java
解释 Java 堆空间和垃圾收集
【8月更文挑战第22天】
39 0
|
1月前
|
安全 Java 编译器
Java对象一定分配在堆上吗?
本文探讨了Java对象的内存分配问题,重点介绍了JVM的逃逸分析技术及其优化策略。逃逸分析能判断对象是否会在作用域外被访问,从而决定对象是否需要分配到堆上。文章详细讲解了栈上分配、标量替换和同步消除三种优化策略,并通过示例代码说明了这些技术的应用场景。
Java对象一定分配在堆上吗?
|
1月前
|
存储 算法 Java
🧠Java零基础 - Java栈(Stack)详解
【10月更文挑战第17天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
44 2
|
2月前
|
存储 算法 Java
🏗️Java零基础:深入了解Java 堆
【10月更文挑战第2天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
30 3
|
2月前
|
存储 安全 Java
【用Java学习数据结构系列】探索栈和队列的无尽秘密
【用Java学习数据结构系列】探索栈和队列的无尽秘密
37 2
|
3月前
|
JSON 前端开发 JavaScript
java中post请求调用下载文件接口浏览器未弹窗而是返回一堆json,为啥
客户端调接口需要返回另存为弹窗,下载文件,但是遇到的问题是接口调用成功且不报错,浏览器F12查看居然返回一堆json,而没有另存为弹窗; > 正确的效果应该是:接口调用成功且浏览器F12不返回任何json,而是弹窗另存为窗口,直接保存文件即可。
166 2
|
2月前
|
存储 算法 Java
【用Java学习数据结构系列】用堆实现优先级队列
【用Java学习数据结构系列】用堆实现优先级队列
38 0