运行时数据区示意图

image.png

常见面试题

百度 三面:说一下JVM内存模型吧,有哪些区?分别干什么的?
方法区:存储类名,类型信息,方法信息,运行池常量,是线程共享的区域,JDK1.8之前实现由永久代实现,是在JVM内存中中,而在JDK1.8后由元空间实现,是在系统内存中。
PC寄存器:指向下一条执行的指令地址,不是线程共享的,不存在GC。
虚拟机栈:作用是主管Java程序的运行,它保存方法的局部变量、部分结果,并参与方法的调用和返回。主要是由栈帧作为基本组成,每个栈帧代表一个方法。也不是线程共享的区域,也不存在GC。
本地方法栈:调用本地native方法时,使用本地方法栈。
堆:堆时存储实例化对象的区域,时JVM内存中最大的空间,也是GC的重点区域,是线程共享的,主要是由新生代,老年代组成。

蚂蚁金服:
Java8的内存分代改进 JVM内存分哪几个区,每个区的作用是什么?
见上
一面:JVM内存分布/内存结构?栈和堆的区别?堆的结构?为什么两个survivor区?

二面:Eden和survior的比例分配
小米: jvm内存分区,为什么要有新生代和老年代
字节跳动: 二面:Java的内存分区 二面:讲讲vm运行时数据库区 什么时候对象会进入老年代?
京东: JVM的内存结构,Eden和Survivor比例。 JVM内存为什么要分成新生代,老年代,持久代。新生代中为什么要分为Eden和survivor。
天猫: 一面:JVM内存模型以及分区,需要详细到每个区放什么。 一面:JVM的内存模型,Java8做了什么改
拼多多: JVM内存分哪几个区,每个区的作用是什么?
美团: java内存分配 jvm的永久代中会发生垃圾回收吗? 一面:jvm内存分区,为什么要有新生代和老年代?