凭借这份JVM面试题,我拿到了字节offer!

很多小伙伴在面临面试的时候遇到的许多问题,面试常用的几项原因,我在下方给大家介绍了,大家可以仔细阅读一下。

内存区域

虚拟机栈—

生命周期与线程相同,描述的是Java 方法执行的内存模型,每个方法在执行的时候都会创建一个栈帧,用于存取局部变量表、操作数栈、动态链接、方法出口等信息

本地方法栈—

与虚拟机栈作用相似,只不过本地方法栈是为虚拟机使用到的Native方法服务

堆-序计数器—

内存空间较小,可以看做是当前线程所执行的字节码的行号指示器。此内存区域是唯一一个在Java虚拟机规范中没有规定任何OutOfMemoryError情况的区域

如果线程正在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是Native方法,这个计数器值为空(Undefined)

堆----

内存区域最大的一块,此内存区域的唯一目的就是存放对象实例,基本上所有的对象实例分配都是由其分配内存。Java堆是垃圾收集器管理的区主要区域,因此有时也成为GC堆

方法区—

也称为非堆,主要用来存取已经被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据

对象内存布局
对象头(Header)—

用于存储对象自身的运行时数据,如HashCode、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳

类型指针—

实例数据(Instance Data)

对象真正存储的有效信息,也是在程序代码中所定义的各种类型的字段内容

对齐补充(Padding)

你可能感兴趣的:(jvm,编程语言,java,面试,笔试,微软,百度,腾讯,spring)