面试题: JVM内存结构

目的

学习记录, 面试准备

资源

B站的一个讲高频面试题的一个学习视频

概览

  • 线程私有
    ① 程序计数器
    ② 虚拟机栈
  • 线程共享
    ① 堆
    ② 方法区
    在这里插入图片描述

JVM内存溢出分类

栈: 类信息
堆: 存对象
程序计数器, 一般不会出现内存溢出.

类型1: OutOfMemoryError

① 堆内存耗尽, 对象越来越多, 有一直在使用, 不能被垃圾回收.
② 方法区内存耗尽, 加载的类越来越多, 很多框架都在在运行期间动态产生新的类
③ 虚拟机栈累积, 每个线程最多会占用1M内存, 线程个数越来越多, 而又长时间运行不销毁

类型2: StackOverflowError

① 虚拟机内部-方法调用次数过多. (一般是方法的递归调用)

方法区与永久代、元空间之间的关系

① 方法区是JVM规范中定义的一块内存区域, 用来存储类元数据、方法字节码、即时编译器需要的信息等
② 永久代是Hostpot虚拟机对JVM规范的实现(1.8之前)
③ 元空间是Hostpot虚拟机对JVM规范的实现(1.8之后), 使用本地内存作为这些信息的存储空间

猜你喜欢

转载自blog.csdn.net/xiaozhengN/article/details/128522804