写点什么

32 个问题,学习 Java 虚拟机的运行时数据区

用户头像
AI乔治
关注
发布于: 2020 年 10 月 27 日
32个问题,学习Java虚拟机的运行时数据区

学习 JVM 虚拟机是一个比较枯燥无味的过程,刚开始基本是看不懂学不懂,然后就是似懂非懂,最后觉得好像懂了一些,到后来又觉得还是没懂,反正就是懵懵懂懂,过目就忘,一问就卡住,说也说不清,其实说的就是我自己。


我觉得在学习了相关理论知识之后,除了进行实操之外,通过提问和回答的方式,也能更好的理解所学知识,并检验自己是否真的理解了。


今天我们要学习的是 Java 虚拟机的运行时数据区,包括程序计数器(Program Counter Register)Java虚拟机栈(Java Virtual Machine Stack)本地方法栈(Native Method Stack)堆(Heap)方法区(Method Area)运行时常量池(Run-Time Constant Pool)


主要是基于 Java SE 8 的规范(The Java Virtual Machine Specification, Java SE 8 Edition)。


那么接下来,我们正式进入问答环节。


公共问题


  • 哪些区域是线程共享的,什么时候创建与销毁?

  • 哪些区域是线程私有的,什么时候创建与销毁?

  • Java 虚拟机栈、堆和方法区使用的内存要保证是连续的吗?

  • 所有区域都会抛出 OutOfMemoryError?


程序计数器


  • 什么是程序计数器?有什么用?

  • 程序计数器对于 Java 方法和本地方法有区别吗?

  • 为什么每个线程要有一个程序计数器?


Java 虚拟机栈和本地方法栈


  • 两者有什么区别?

  • Java 虚拟机栈的作用是什么?

  • Java 虚拟机栈在何时抛出何种异常?

  • Java 虚拟机栈默认大小是多少?如何修改?

  • 栈帧是什么,什么时候创建与销毁?

  • 栈帧里面都装了什么内容?

  • 不同线程的栈帧之间可以互相引用吗?

  • 如何理解当前栈帧?方法相互调用如何影响栈帧?


局部变量表


  • 什么是局部变量表?

  • 局部变量表存储在哪里?

  • 本地方法栈是必须的吗?

  • 本地方法栈在何时抛出何种异常?


Java 堆


  • 堆的作用

  • 所有的对象实例真的都要在堆上分配吗?

  • 堆一般会怎么划分使用?

  • 为什么堆内存要进行划分?


TALB


  • TLAB 是什么?

  • TLAB 有什么作用?

  • TLAB 如何工作?


方法区


  • 什么是方法区,以及其作用?

  • 方法区进行垃圾回收的目的是什么?

  • 方法区就是永久代吗?

  • 使用永久代来实现方法区有缺点吗?


运行时常量池


  • 运行时常量池是什么?

  • 何时创建?

  • 在哪里分配?


看完三件事❤️


如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:


  1. 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。

  2. 关注公众号 『 java 烂猪皮 』,不定期分享原创知识。

  3. 同时可以期待后续文章 ing🚀



作者:二进制之路


出处:https://club.perfma.com/article/302829


用户头像

AI乔治

关注

分享后端技术干货。公众号【 Java烂猪皮】 2019.06.30 加入

一名默默无闻的扫地僧!

评论

发布
暂无评论
32个问题,学习Java虚拟机的运行时数据区