JVM-虚拟机栈的面试题

博客围绕栈溢出和线程安全等问题展开解答。提到栈大小不足可通过 -Xss 设置,空间不足会出 OOM 错误。还探讨了栈溢出时间、资源占用等情况,总结了不同区域与 error 和 GC 的关系,最后指出变量产生和消亡情况决定线程是否安全。

在这里插入图片描述
第一题:
栈溢出(StackOverflowError:)
当栈的大小不够的时候,可以通过-Xss设置栈的大小,如果整个空间都不足了,就会出OOM的错误

第二题:
不能,只能够说出现StackOverflowError的时间会晚一些,但是不能保证一定不会溢出

第三题:
不是!只是会出错的时间会晚一些,会占用资源

第四题:不会!
在这里插入图片描述
总结:
对于
error GC(垃圾回收)
程序计数器 不涉及 不涉及
本地方法栈 涉及 不涉及
虚拟机栈 涉及 不涉及
堆 涉及 涉及
方法区 涉及 涉及

第五题:具体问题具体分析
在这里插入图片描述
如果变量是在内部产生,内部消亡的,那么是线程安全的;
如果变量不是在内部产生的,或者又返回了出去,就是线程不安全的
(p62:不太明白!)

### 关于JVM虚拟机面试题整理 #### JVM参数分类 JVM的参数可以分为三类:标准参数、非标准参数以及不稳定参数。标准参数是以`-`开头,适用于所有版本的JDK;非标准参数以`-X`开头,可以通过命令`java -X`查看具体选项;而不稳定参数则以`-XX:`开头,其具体内容因JDK版本而异,可通过`java -XX:+PrintFlagsFinal`来获取详细的参数列表[^1]。 #### 类加载机制 JVM加载Class文件遵循一定的原理和机制。当一个类首次被引用时,JVM会通过类加载器将其对应的`.class`文件从磁盘读取并加载到内存中。这一过程通常涉及三个主要阶段:加载、链接和初始化。其中,加载负责将字节码文件转换为方法区中的运行时数据结构;链接进一步验证类的合法性,并分配静态变量的内存空间;最后,初始化完成静态变量赋值及静态代码块的执行。 #### 虚拟机的作用与结构 Java虚拟机主要用于管理方法调用期间的数据操作问题。每当启动一个新的线程时,都会创建相应的虚拟机实例。该由一系列帧(Frame)组成,每执行一个方法就会压入新的帧,退出方法时弹出对应帧。值得注意的是,局部变量表、操作数等重要组件均位于此区域之内[^2]。 #### 垃圾收集(GC)概述及其必要性 GC即Garbage Collection(垃圾回收),旨在自动清理不再使用的对象所占用的内存资源。由于Java采用面向对象编程范式,大量动态创建的对象可能导致内存泄漏风险增加。因此引入了专门用于监控未引用对象状态的垃圾回收机制。一旦检测到某些对象无法再访问,则立即将这些废弃对象标记出来以便后续销毁释放其所占空间[^3]。 #### 双亲委派模型简介 为了保障Java应用程序的安全性和稳定性,在设计之初便提出了双亲委派模式作为默认的类加载策略。按照这种规则,当某个特定ClassLoader尝试加载某类别名下的.class文件前,它首先委托给父级Loader去寻找目标资源;如果未能成功匹配,则允许子代继续尝试直至找到为止或者抛出ClassNotFoundException异常结束整个流程[^4]。 ```python # 示例代码展示自定义类加载器实现简单版双亲委派逻辑 class MyCustomClassLoader extends ClassLoader { public Class<?> loadClass(String name) throws ClassNotFoundException { try{ return findLoadedClass(name); // Step 1: Check if already loaded. }catch(Exception e){ System.out.println("Not found locally."); } try{ return getParent().loadClass(name); // Step 2: Delegate to parent loader first. } catch(ClassNotFoundException ex){ System.out.println("Parent cannot resolve the class either."); } return super.loadClass(name); // Step 3: Attempt loading by self as last resort. } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值