微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

带你了解面试官超级喜欢问的JVM,offer拿到手软

前言

随着阿巴阿巴在面试中愈战愈勇,这几天又约上面试了,这次面试官让她谈谈对JVM的理解。

回家等通知

面试官: 你对JVM的内存模型了解吗?能否讲讲里面的细节呢?

阿巴阿巴: JAVA虚拟机在执行JAVA程序的过程中,会把所有它管理的内存划分为若干个不同的数据区域,这些区域都有着各自的用途。

根据《JAVA 虚拟机规范SE 7 版》的规定,JAVA虚拟机所管理的内存将包括以下几个运行时的数据区域:堆、方法区、虚拟机栈、本地方法栈、程序计数器。

面试官: 那你能给我大概的介绍下这几区域吗?

阿巴阿巴: 方法区主要存放的是虚拟机加载的类信息、常量、静态变量,堆区域主要是存放对象的,虚拟机栈是用来存放方法运行时产生的栈帧的,本地方法栈则是用来存放本地方法(native)方法运行时产生的栈帧的,程序计数器是用于存放下一条指令所在单元的地址的地方。

面试官: 不错,那你知道什么时候栈内存会发生溢出嘛?

阿巴阿巴: 嗯,,,如果线程的栈深度大于虚拟机运行的最大深度,将抛出StackOverflowError异常,常常出现于递归的方法调用

面试官: 那还有其他情况会出现栈内存溢出嘛?

阿巴阿巴: 好像没有其他情况了......

面试官: 堆的分代可以细讲一下嘛?

阿巴阿巴: 堆的话主要进行了一个分代,分成新生代、老年代、持久代。

阿巴阿巴: 新生代主要存一些朝生夕死的对象,老年代存的是比较稳定的对象或者是大对象,持久代用于存放用于存放静态文件,如今java类方法等。

面试官: 好的、那今天的面试就到这里吧,你先回去等通知哈。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐