当前位置: 首页>编程语言>正文

JVM运行时数据区(四)

运行时数据区面试问题:

Q: 使用PC寄存器储存字节码指令地址有什么用?
   为什么使用PC寄存器记录当前线程的执行地址?
A: 因为CPU时在不停的切换线程,为了给CPU指向下个要执行的位置

Q: 为什么寄存器是单个线程私有的
A: 多线程的情况下,共享会导致执行乱掉

Q: 举例栈移除的情况
A: (StackOverflow)递归没有退出条件 默认1M   
       通过-Xss设置栈帧大小	报错:OOM

Q: 调整栈大小,是否可以保证栈不溢出?
A: 不能保证,只能让StackOverflow出现的更晚

Q: 分配的栈内存越大越好吗?
A: 不是,栈内存越大,线程数量就越少

Q: 垃圾回收是否涉及到虚拟机栈
A: 	                  error	  GC
	--程序寄存器	  NO	  NO
	--虚拟机栈	  YES	  NO
	--本地虚拟机栈     YES	  NO
	--堆		  YES     YES
	--方法区	          YES     YES
Q: 方法中定义的局部变量是否线程安全?
A: 单线程一定安全
   多线程的情况下不考虑同步机制会不安全的

Q: 堆空间是分配对象的唯一选择吗?
A: 是的,存在栈上分配的情况,但不成熟,hotspot虚拟机未使用,咱们用的只是标量替换
   
Q: 你使用过WeakHashMap吗?
A: 主要是对map的回收,entry对象集成了weakRef

https://www.xamrdz.com/lan/5qe1961004.html

相关文章: