JVM-虚拟机栈面试题

常见面试题

举例栈溢出的情况

当栈空间不足时会出现StackOverflowError
通过-Xss设置栈的大小
当整个内存空间不足时,栈再去扩充时会出现OOM异常

调整栈大小,是否能保证不出现溢出

有可能,不能保证不出现,只能调整栈的大小,会让出现异常的情况晚一些,但不能保证不
会出现

垃圾回收是否会涉及到虚拟机栈

不会,但是存在OOM,Java栈大小是动态或者固定不变的。如果是动态扩展,无法申请到足够内存OOM,如果是固定,线程请求的栈容量超过固定值,则StackOverflowError

分配的栈内存越大越好吗

不是,可以避免过早出现StackOverflowError,但还是会有,会导致其他内存空间变小

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

具体问题具体分析

  • 如果在方法内部的对象,不返回,是安全的
1
2
3
4
5
public void m1 () {
StringBuilder s = new StringBuilder();
s.append("1");
s.append("2");
}
  • 如果在方法参数的对象,是不安全的
1
2
3
4
public void m2 (StringBuilder s) {
s.append("1");
s.append("2");
}
  • 如果在方法内有对象返回的,是不安全的
1
2
3
4
5
6
public StringBuilder m3 () {
StringBuilder s = new StringBuilder();
s.append("1");
s.append("2");
return s;
}
  • 如果在方法内有对象返回的,返回的是一个新的String对象,是安全的
1
2
3
4
5
6
public String m4 () {
StringBuilder s = new StringBuilder();
s.append("1");
s.append("2");
return s.toString();
}

相关文章

Java框架面试题

Java基础面试题

JVM

JVM-类加载子系统

JVM-运行时数据区

JUC-JVM面试题