【每日面试】Java关于内存的面试问题(3)

Java的内存模型和内存区域不是一个概念,这在之前没有研究过,很多面试题问到内存的东西,也是以JVM为主,果然学无止境啊~因为关于内存模型的资料没找到多少,所以这次就不深入这个方向了。准备以JVM为核心去研究各个内存区域的作用,再结合面试题去完善知识架构,最后比较难搞的就是JVM调优了,还没想好怎么学习,有建议的欢迎留言。



1.

先明确Java内存模型和内存区域的区别。

1)Java内存模型(JMM)
啥是模型?如果说手办可能大部分人一下就明白了,那模型看起来就是具现化的东西。模型有啥用呢?比如一个火箭模型,简单的可以让人知道火箭是什么样的,精细的可以让人了解到火箭的结构,对学习相关知识有帮助。那这样去想,Java的内存模型可能就是对Java在如何使用内存时的一个具象化体现,体现了相关组件的联系。有的说是定义了线程和主内存之间的抽象关系,能够帮助学习Java并发编程。这样的话可以理解为:

研究Java内存模型可以帮助学习Java并发编程。等研究这一块内容的时候,再联系起来看看。


2)Java内存区域(JVM)

相比之下内存区域就好理解多了。区域就是指一块地方,那Java内存区域就是Java程序运行时使用的区域,这一块统称为JVM。因为程序员主要是跟代码打交道,所以关于JVM的内容更贴切一些,所以才会问的这么频繁。如果有一天JVM调优成为一项必会技能,大家估计就不会觉得有多奇怪了。还有个思考是,有没有一种可能,根据程序的不同状态,自动调整JVM参数以达到优化的效果,如果这样的工具有了,那JVM优化就简单多了。


2.

关于JVM内存区域,先看看到底划分为几个区域,这里有一点需要注意,在JDK8之后的内存区域划分跟之前的划分不同了,新增元数据区的概念,放两张对比图:

JDK8之前

JDK8之后

JDK版本现在更新的很快,大部分项目都在用JDK8,所以之前的就不研究了。技术发展很快,所以学习的时候会产生滞后现象,对于一些理论性知识,通过学习理论思想,只要技术不发生本质的改变,那就没有太大的影响。但是,对于实战性的知识,就一定要看稳定的方式和最新的方式,学会一种,再融会贯通其它的。

3.

从上图可以看出,现在的内存区域有:

1)本地方法栈

2)程序计数器

3)虚拟机栈

4)堆区域

5)元数据区

像常问到的方法区、常量池这些概念都归并到元数据区中了,这块也是相较于之前新的内容,所以在这块要重点研究一下。

下一章开始逐一分析每个内存区域的作用。

梳理完这些,有一个疑问:JVM使用哪块系统内存?既然是内存区域的划分,那不管怎么划分,体现在系统层面,肯定要选择一块内存区域来使用的,那是怎么选择的呢?没搞明白啊~~

互联网面试解析 文章被收录于专栏

面试分析,在机会来临前做好准备。

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务