栈会溢出吗?什么时候溢出?方法区会溢出吗?

文章目录

今天跟大家来谈谈栈方面会不会溢出这么一个问题,以及方法区会不会溢出

栈会溢出吗?什么时候溢出?方法区会溢出吗?

是线程私有的,它的生命周期与线程相同,每个方法在执行的时候都会创建一个栈帧,用来存储局部变量表,操作数栈,动态链接,方法出口等信息。

局部变量表又包含基本数据类型, 对象引用类型。如果线程请求的栈深度大于虚拟机所允许的最大深度,将抛出StackOverflowError 异常,方法递归调用产生这种结果。

如果 Java 虚拟机栈可以动态扩展, 并且扩展的动作已经尝试过,但是无法申请到足够的内存去完成扩展,或者在新建立线程的时候没有足够的内存去创建对应的虚拟机栈,那么 Java 虚拟机将抛出一个 OutOfMemory 异常。(线程启动过多)。

方法区会发生溢出。

HotSpot jdk1.7 之前字符串常量池是方法区的一部分,方法区叫做"永久代",在 1.7 之前无限的创建对象就会造成内存溢出,提示信息:PermGen space 而是用 jdk1.7 之后,开始逐步去永久代,就不会产生内存溢出。

方法区用于存放 Class 的相关信息,如类名、访问修饰符、常量池、字段描述、方法描述等, 如果动态生成大量的 Class 文件,也会产生内存溢出。

常见的场景还有:

大量 JSP 或动态产生JSP 文件的应用(JSP 第一次运行时需要编译为 java 类)、基于 OSGi 的应用(即使是同一个类文件,被不同的类加载器加载也会视为不同的类)。

相关推荐
ROLL.78 分钟前
同步与异步
android·java
青槿吖8 分钟前
告别RestTemplate!Feign让微服务调用像点外卖一样简单
java·开发语言·分布式·spring cloud·微服务·云原生·架构
MacroZheng10 分钟前
横空出世!IDEA最强Spring插件来了,让你的开发效率成倍提升!
java·spring boot·后端
6Hzlia10 分钟前
【Hot 100 刷题计划】 LeetCode 155. 最小栈 | C++ 打包状态法 (最优雅的 O(1) 检索)
java·c++·leetcode
2501_9130613411 分钟前
网络原理之HTTP(2)
java·网络协议
NEGl DRYN12 分钟前
Spring Boot 3.3.4 升级导致 Logback 之前回滚策略配置不兼容问题解决
java·spring boot·logback
MeAT ITEM15 分钟前
net.sf.jsqlparser.statement.select.Select.getSelectBody()
java
我是无敌小恐龙18 分钟前
Java SE 零基础入门 Day02 运算符与流程控制超详细笔记
java·数据结构·spring boot·笔记·python·spring·spring cloud
invicinble20 分钟前
对于代码阅读能力的思考和总结
java
jrlong20 分钟前
HelloAgents 进阶篇 task03
java·前端·python