首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

Java栈溢出|内存泄漏|内存溢出

编程知识
2024年08月13日 14:36

Java虚拟机栈是线程私有的,它的生命周期和线程同步

一个线程每执行到一个方法,JVM就会创建一个栈帧(用于存储基本数据类型、对象指针和返回值等),并将栈帧压入栈中。

代码示例:

public class Example {
    public static void main(String[] args) {
        Example example = new Example();
        example.m1();
    }

    public void m1() {
        int x = 0;
        m2();
    }
    public void m2() {
        Apple y = new Apple();
        m3();
    }
    public void m3() {
        float z = 1.0f;
    }
}

执行流程:

  • 首先,程序启动,main() 方法入栈。
  • 然后,m1() 方法入栈,声明 int 类型变量 x = 0。注意,无论是 x 还是 0 都存储在栈帧中。
  • 接着,m2() 方法入栈,创建了一个 Apple 对象,并被赋给变量 y。请注意,实际的 Apple 对象是在 Java 堆内存中创建的,而不是线程栈中,只有 Apple 对象的引用以及变量 y 被包含在栈帧里。
  • 最后,m3() 方法入栈,声明 float 类型变量 z = 1.0f。同理,z 和 1.0f 都被存储在栈帧里。

当方法执行完成后,所有的线程栈帧将按照后进先出的顺序逐一出栈,直至栈空为止

img

Java线程栈默认大小是由操作系统决定的,一般为1MB或2MB。如果需要调整线程栈的大小,可以使用-Xss参数来设置。在实际开发中,默认的线程栈大小通常已经足够满足需求,只有在遇到线程栈溢出错误时才需要考虑调整大小。

一旦递归过深,线程栈的容量增长超过了允许的栈容量,就会抛出StackOverflowError(栈溢出) 错误。

那么什么是内存泄漏和内存溢出呢?

  • 内存溢出(out of memory):指程序在申请内存时,没有足够的内存空间供其使用。
  • 内存泄露(memory leak):指程序在申请内存后,无法释放已申请的内存空间,进而导致内存逐渐被占光。
  • memory leak 最终会导致 out of memory。

内存溢出异常抛出的原因(包括但不限于):

  • 如果新线程在申请栈时失败了,就会抛出 OutOfMemoryError(内存溢出) 错误。
  • 或者当JVM不能分配给对象的创建空间,也会抛出 OutOfMemoryError 错误。

小结:

  • StackOverflowError:递归过深,递归没有出口。
  • MemoryLeak:申请内存后,无法释放已申请的内存空间。
  • OutOfMemoryError:JVM空间溢出,创建对象速度高于GC回收速度。
From:https://www.cnblogs.com/GilbertDu/p/18357052
本文地址: http://shuzixingkong.net/article/1056
0评论
提交 加载更多评论
其他文章 告别卡顿,畅享GitHub:国内开发者必看的五大加速访问与下载技巧
告别卡顿,畅享GitHub:国内开发者必看的五大加速访问与下载技巧 本文介绍了五种加速在国内访问和下载 GitHub 的方法,包括:使用 Gitee 平台加速克隆代码、修改 hosts 文件、使用油猴脚本、通过在线镜像站点、以及使用 FastGithub 等加速工具。 Github 是一个面向开源及
告别卡顿,畅享GitHub:国内开发者必看的五大加速访问与下载技巧 告别卡顿,畅享GitHub:国内开发者必看的五大加速访问与下载技巧 告别卡顿,畅享GitHub:国内开发者必看的五大加速访问与下载技巧
JavaScript魔法:在线Excel附件上传与下载的完美解决方案
最新技术资源(建议收藏) https://www.grapecity.com.cn/resources/ 前言 在本地使用Excel时,经常会有需要在Excel中添加一些附件文件的需求,例如在Excel中附带一些Word,CAD图等等。同样的,类比到Web端,现在很多人用的在线Excel是否也可以像
JavaScript魔法:在线Excel附件上传与下载的完美解决方案
这就是为什么你学不会DDD
本文书接上回《为了给Javaer落地DDD,我们不得不写开源组件》,欢迎关注公众号(老肖想当外语大佬),获取最新文章更新和DDD框架源码,视频和直播在B站。 https://mp.weixin.qq.com/s/Nsc3hwl4u9je7DaXsC05mg 背景 我们在《这是DDD建模最难的部分(其
这就是为什么你学不会DDD 这就是为什么你学不会DDD 这就是为什么你学不会DDD
与LLMs进行在IDE中直接、无需提示的交互是工具构建者探索的一个有希望的未来方向
这个观点在卡内基梅隆大学与谷歌研究人员合作文章《Using an LLM to Help With Code Understanding》中提出。
与LLMs进行在IDE中直接、无需提示的交互是工具构建者探索的一个有希望的未来方向 与LLMs进行在IDE中直接、无需提示的交互是工具构建者探索的一个有希望的未来方向 与LLMs进行在IDE中直接、无需提示的交互是工具构建者探索的一个有希望的未来方向
Python网页应用开发神器fac 0.3.0全新版本发布
大家好我是费老师,在Python生态中,有很多以Python为主要开发语言,实现网页应用开发的框架,其中最为知名的有Dash、flet、streamlit、gradio、nicegui等。 如果综合考虑流行度、开发效率、开发自由度、相关生态成熟度、可拓展性、安全性等各方面的能力,Dash是其中天花板
Python网页应用开发神器fac 0.3.0全新版本发布 Python网页应用开发神器fac 0.3.0全新版本发布 Python网页应用开发神器fac 0.3.0全新版本发布
python连接钉钉自动化提交OA审批
一、准备工作 1、安装阿里云支持包,点击跳转:https://open.dingtalk.com/document/resourcedownload/download-server-sdk 2、注册钉钉开发者账号,点击链接:https://open.dingtalk.com/ 3、获取AK,SK 4
《熬夜整理》保姆级系列教程-玩转Wireshark抓包神器教程(4)-再识Wireshark
1.简介 按照以前的讲解和分享路数,宏哥今天就应该从外观上来讲解WireShark的界面功能了。 2.软件界面 由上到下依次是标题栏、主菜单栏、主菜单工具栏、显示过滤文本框、打开区、最近捕获并保存的文件、捕获区、捕获过滤文本框、本机所有网络接口、学习区及用户指南等。 2.1启动界面 首次打开启动 W
《熬夜整理》保姆级系列教程-玩转Wireshark抓包神器教程(4)-再识Wireshark 《熬夜整理》保姆级系列教程-玩转Wireshark抓包神器教程(4)-再识Wireshark 《熬夜整理》保姆级系列教程-玩转Wireshark抓包神器教程(4)-再识Wireshark
Cookie、localStorage 和 sessionStorage 的区别及应用实例
在前端开发中,持久化数据存储是一个非常常见的需求。为了实现这一点,浏览器提供了多种方式,包括 Cookie、localStorage 和 sessionStorage。这三者各有优劣,适用于不同的场景 1. Cookie Cookie 是浏览器存储少量数据的一种机制,通常由服务器生成并发送到客户端。
Cookie、localStorage 和 sessionStorage 的区别及应用实例 Cookie、localStorage 和 sessionStorage 的区别及应用实例