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

177 阅读3分钟
![32个问题,学习Java虚拟机的运行时数据区](https://static001.geekbang.org/infoq/62/6203c23ad936028e8f50045a0d8256bf.jpeg)

学习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🚀

作者:二进制之路

出处:club.perfma.com/article/302…