运行时数据区面试问题:
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