前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >虚拟机栈的相关面试题

虚拟机栈的相关面试题

作者头像
utopia
发布2023-03-21 10:45:36
1640
发布2023-03-21 10:45:36
举报
文章被收录于专栏:UtopiaUtopia

1.举例栈溢出的情况?(StackOverflowError)

  • 通过 -Xss 设置栈的大小
  • 递归很容易出现栈溢出

2.举例栈溢出的情况?(StackOverflowError)

  • 不能保证不出现溢出,只能让栈溢出出现的时间晚一点,不可能不出现

3.分配的栈内存越大越好么?

  • 不是,一定时间内降低了栈溢出的概率,但是会挤占其它的线程空间,因为整个虚拟机的内存空间是有限的

4.垃圾回收是否涉及到虚拟机栈?

  • 不涉及

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

  • 如果只有一个线程才可以操作此数据,则必是线程安全的。
  • 如果有多个线程操作此数据,则此数据是共享数据。如果不考虑同步机制的话,会存在线程安全问题。

具体问题具体分析:

  • 如果对象是在内部产生,并在内部消亡,没有返回到外部,那么它就是线程安全的,反之则是线程不安全的。
代码语言:javascript
复制
/**
 * 面试题:
 * 方法中定义的局部变量是否线程安全?具体情况具体分析
 *
 *   何为线程安全?
 *      如果只有一个线程才可以操作此数据,则必是线程安全的。
 *      如果有多个线程操作此数据,则此数据是共享数据。如果不考虑同步机制的话,会存在线程安全问题。
 */
public class StringBuilderTest {

    //s1的声明方式是线程安全的,因为s1只在方法内部操作,属于局部变量
    public static void method1(){
        //StringBuilder:线程不安全
        StringBuilder s1 = new StringBuilder();
        s1.append("a");
        s1.append("b");
        //...
    }

    //sBuilder通过参数传递方法内,存在线程不安全的问题
    public static void method2(StringBuilder sBuilder){
        sBuilder.append("a");
        sBuilder.append("b");
        //...
    }

    //操作s1之后,将s1作为返回值返回,这样可能被其他线程所调用,所以存在线程不安全的问题
    public static StringBuilder method3(){
        StringBuilder s1 = new StringBuilder();
        s1.append("a");
        s1.append("b");
        return s1;
    }

    //s1的操作:是线程安全的,因为String是线程安全的
    public static String method4(){
        StringBuilder s1 = new StringBuilder();
        s1.append("a");
        s1.append("b");
        return s1.toString();
    }

    public static void main(String[] args) {
        StringBuilder s = new StringBuilder();

        new Thread(() -> {
            s.append("a");
            s.append("b");
        }).start();

        method2(s);
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-10-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档