面试官问:运行时的内存布局

用户头像
Java小咖秀
关注
发布于: 2020 年 08 月 17 日
面试官问:运行时的内存布局

原文 https://juejin.im/post/6861410796233195528





1 JVM 的内存区域布局



  • java 代码的执行步骤有三点

  • JVM 执行的字节码需要用类加载来载入;字节码文件可以来自本地文件,可以在网络上获取,也可以实时生成。就是说你可以跳过写 java 代码阶段,直接生成字节码交由 JVM 执行

  • 其中 Java 虚拟机栈、程序计数器、Heap、本地方法栈、Metaspace 属于 JVM 运行时的内存;按是否线程共享则可以分两类

  • 

  • JAVA 堆和 MetasSpace 元空间属于线程共享的;虚拟机栈和本地方法栈、程序计数器是线程私有的



2 JVM 五大数据区域介绍



  • 2.1 程序计数器(Progarm Counter Register)

  • 2.2 虚拟机栈 (Virtual Machine Stack)

  • 

  • 2.3 本地方法栈 (Native Method Stack)

  • 上述 3 类区域,生命周期与 Thread 相同,即:线程创建时,相应的内存区创建,线程销毁时,释放相应内存

  • 2.4 堆 (Heap)

  • 

  • 2.5 元空间 (MetaSpace)

  • 使用元空间代替永久代原因

  • CodeCache

  • 直接内存



3 JVM 运行时内存布局和 JMM 内存模型区别





  • JVM 内存区域是指 JVM 运行时将内存数据分区域存储,强调对内存空间的划分

  • JAVA 内存模型是 Java 语言在多线程并发情况下对于共享变量内存操作的规范:解决变量在多线程的可见性、原子性的问题



4 JMM 内存模型交互操作



  • 内存交互操作有八种,虚拟机的实现保证每一个操作都是原子性的

  • read 和 load 好像是相同的操作?各位有何高见,请指教下

  • JMM 对这八种指令的使用,制定了如下规则

  • *



欢迎指正文中错误



参考文章



  • 深入理解 Java 虚拟机

  • JVM 之内存布局超详细整理 [1]

  • Metaspace 之一:Metaspace 整体介绍 [2]



参考资料



[1]



JVM 之内存布局超详细整理: https://blog.csdn.net/mayfly_hml/article/details/102805030



[2]



Metaspace 之一:Metaspace 整体介绍: https://www.cnblogs.com/duanxz/p/3520829.html



用户头像

Java小咖秀

关注

公众号:Java小咖秀,专注Java相关领域。 2020.06.18 加入

公众号【Java小咖秀】,回复“面试”白嫖一份博主Java面试题。 个人网站:https://www.javaxks.com。

评论

发布
暂无评论
面试官问:运行时的内存布局