JVM 栈堆

Java虚拟机栈-栈内存溢出

  • Java虚拟机栈如果栈帧过多,占用内存超过栈内存可以分配的最大大小就会出现内存溢出
  • Java虚拟机栈内存溢出时会出现StackOverFlowError的错误

本地方法栈

  • Java虚拟机栈存储了Java方法调用时的栈帧,而本地方法栈存储的是native本地方法的栈帧
  • 在Hotspot虚拟机中,Java虚拟机和本地方法栈实现上使用了同一个栈空间。本地方法栈会在栈内存上生成一个栈帧,临时保存方法的参数同时方便出现异常时把本地方法的栈信息打印出来

  • 一般Java程序中堆内存是空间最大的一块内存区域,创建出来的对象都存在与堆上
  • 栈上的局部变量表中,可以存放堆上对象的引用,静态变量也可以存放堆对象的引用,通过静态变量就可以实现对象在线程之间共享
  • 堆空间有三个需要关注的值,used、total、max
  • used指的是当前已使用的堆内存,total是java虚拟机已经分配的可用堆内存,max是java虚拟机可以分配的最大堆内存
  • 随着堆内存的对象增多,当total可以使用的内存即将不足时,java虚拟机会继续分配内存给total
  • 如果堆内存不足,java虚拟机就会不断的分配内存,total值会变大。total最多只能与max相等
  • 如果不设置任何的虚拟机参数,max默认是系统内存的1/4,total默认是系统的1/64。在实际应用中一般都需要设置total和max的值
  • -Xms设置total -Xmx设置max,Xmx必须大于2MB,Xms必须大于1M

问题:是不是当used=max=total的时候,堆内存就溢出了呢?

  • 不是,堆内存溢出的判断条件比较复杂,跟垃圾回收器有关。
相关推荐
1.01^100012 小时前
[5-01-01].第04节:初识字节码文件 - 字节码文件作用
jvm
找不到、了15 小时前
JVM核心知识整理《1》
jvm
L.EscaRC17 小时前
面向 Spring Boot 的 JVM 深度解析
jvm·spring boot·后端
学到头秃的suhian1 天前
JVM-类加载机制
java·jvm
NEFU AB-IN2 天前
Prompt Gen Desktop 管理和迭代你的 Prompt!
java·jvm·prompt
唐古乌梁海2 天前
【Java】JVM 内存区域划分
java·开发语言·jvm
众俗2 天前
JVM整理
jvm
echoyu.2 天前
java源代码、字节码、jvm、jit、aot的关系
java·开发语言·jvm·八股
代码栈上的思考3 天前
JVM中内存管理的策略
java·jvm
thginWalker3 天前
深入浅出 Java 虚拟机之进阶部分
jvm