• JVM虚拟机栈的五道面试题


    1、举例栈溢出的情况?(StackOverFlowError)

    通过-Xss设置栈的大小
    如果采用固定大小的java虚拟机栈,每一个线程的java虚拟机栈容量在线程创建的时候选定,如果线程请求分配的栈容量超过java虚拟机栈允许的最大容量,抛出StackOverFlowError异常

    • 当栈大小固定时,不断增加栈帧数量直至栈所能容纳的最大值,就会发生StackOverflowError异常。
    • 当栈的大小可以动态扩展时,当栈扩展至内存不足时,会发生OutOfMemoryError异常。

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

    不能,调整栈大小的话 理论上是出现溢出的情况晚一点出现,但是不能确定不是不出现。例如:给5千 可以多用几天 无法保证用一辈子
    如果java虚拟机栈可以动态扩展,并且在尝试扩展的时候无法申请到足够的内存,或者在创建新的线程时没有足够的内存去创建对应的虚拟机栈,抛出OutOfMemoryError异常
    例如:递归死循环时,不论设置栈多大,都会出现栈溢出的情况。
    在这里插入图片描述

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

    不对,挤占其他栈内存空间,线程的数量

    以及其他区域可用空间变小,进而影响程序的执行。

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

    不会的 栈的出栈操作就相当于丢弃垃圾。

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

    具体问题具体分析
    在这里插入图片描述
    总结的一句话是重点在这里插入图片描述
    在这里插入图片描述
    s1只有一个线程 所以线程安全
    method04 有返回值
    method02 是共享数据
    method03
    method05
    在这里插入图片描述这个是因为s1在这里面自主消亡了 所以s1是线程安全的
    但是toString是new了一个新的对象 所以toString是线程不安全的
    在这里插入图片描述

  • 相关阅读:
    AIGC之文本内容生成概述(下)—— GPT
    4.springcloudalibaba sentinel v1.8.6版本服务搭建
    实战:fabric 用户证书吊销操作流程
    [附源码]java毕业设计宾馆客房管理系统
    VisualAssist 10.9.2 Crack-2022-09-15
    Mysql数据库
    惯性导航技术, IMU, AHRS
    Vue2.0 —— Vue.set(vm.$set) 源码探秘
    javascript如何使用process.argv
    Java架构师设计思想
  • 原文地址:https://blog.csdn.net/qq_41810415/article/details/126621629