JVM笔记-10Java虚拟机栈(方法返回地址、相关试题)

学习JVM的一点简单笔记,宋红康老师jvm讲的很好,感谢。

尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机)


方法返回地址(return address)

JVM笔记-10Java虚拟机栈(方法返回地址、相关试题)_第1张图片

JVM笔记-10Java虚拟机栈(方法返回地址、相关试题)_第2张图片

JVM笔记-10Java虚拟机栈(方法返回地址、相关试题)_第3张图片
from、to:字节码指令地址,4至16行出现异常,19行处理异常。

JVM笔记-10Java虚拟机栈(方法返回地址、相关试题)_第4张图片

附加信息

在这里插入图片描述


相关试题

举例栈溢出的情况?

StackOverFlowError,栈空间一个一个加栈帧时,栈空间不足时,栈溢出。通过-Xss设置栈的大小,OOM(内存溢出)但整个内存空间不足,再扩容栈,就出现OOM。

调整栈的大小,就能保证不出现栈溢出吗?

不能,死循环(StackOverFlowError),只能让栈溢出情况出现晚,但不能避免。

垃圾回收是否涉及虚拟机栈(Java Virtual Machine Stacks)?

不会,虚拟机栈只有简单操作(进栈出栈),不需要垃圾回收(出栈——垃圾出去了)不需要显式的回收。

本地方法栈,调用c相关方法,也是栈结构。

运行时数据区 Error GC
PC寄存器
虚拟机栈
本地方法栈
方法区

分配的栈内存越大越好吗?

不是,理论上可以一定程度上延缓,栈溢出,但还是不能避免。一个栈过大,内存空间有限,挤占,挤占其他栈空间,线程数变少。

方法中定义的局部变量是否线程安全?

具体问题具体分析,线程安全是什么?

如果只有一个线程才可以操作此数据,则必是线程安全。

如果有多个线程操作此数据,则此数据是共享数据。如果不考虑同步机制,会存在线程安全问题。


只有一个线程操作,线程安全。

JVM笔记-10Java虚拟机栈(方法返回地址、相关试题)_第5张图片
JVM笔记-10Java虚拟机栈(方法返回地址、相关试题)_第6张图片

JVM笔记-10Java虚拟机栈(方法返回地址、相关试题)_第7张图片
可能会被多个线程调用。

JVM笔记-10Java虚拟机栈(方法返回地址、相关试题)_第8张图片
有返回的,也是可能会被多个线程操作。

即有被其他线程共享的可能性。
JVM笔记-10Java虚拟机栈(方法返回地址、相关试题)_第9张图片
s1 在内部消亡了,s1线程安全,但toString方法中new的String是线程不安全的。可能会被多个线程操作。


在内部产生内部消亡,线程安全。

作用于不只在方法内部,发生逃逸,线程不安全。

你可能感兴趣的:(jvm,jvm)