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 如何工作?
方法区
什么是方法区,以及其作用?
方法区进行垃圾回收的目的是什么?
方法区就是永久代吗?
使用永久代来实现方法区有缺点吗?
运行时常量池
运行时常量池是什么?
何时创建?
在哪里分配?
看完三件事❤️
如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
关注公众号 『 java 烂猪皮 』,不定期分享原创知识。
同时可以期待后续文章 ing🚀

作者:二进制之路
出处:https://club.perfma.com/article/302829
评论