目录
- 目的
- 资源
- 概览
- JVM内存溢出分类
- 类型1: OutOfMemoryError
- 类型2: StackOverflowError
- 方法区与永久代、元空间之间的关系
目的
学习记录, 面试准备
资源
B站的一个讲高频面试题的一个学习视频
概览
- 线程私有
① 程序计数器
② 虚拟机栈 - 线程共享
① 堆
② 方法区
JVM内存溢出分类
栈: 类信息
堆: 存对象
程序计数器, 一般不会出现内存溢出.
类型1: OutOfMemoryError
① 堆内存耗尽, 对象越来越多, 有一直在使用, 不能被垃圾回收.
② 方法区内存耗尽, 加载的类越来越多, 很多框架都在在运行期间动态产生新的类
③ 虚拟机栈累积, 每个线程最多会占用1M内存, 线程个数越来越多, 而又长时间运行不销毁
类型2: StackOverflowError
① 虚拟机内部-方法调用次数过多. (一般是方法的递归调用)
方法区与永久代、元空间之间的关系
① 方法区是JVM规范中定义的一块内存区域, 用来存储类元数据、方法字节码、即时编译器需要的信息等
② 永久代是Hostpot虚拟机对JVM规范的实现(1.8之前)
③ 元空间是Hostpot虚拟机对JVM规范的实现(1.8之后), 使用本地内存作为这些信息的存储空间