专业的JAVA编程教程与资源

网站首页 > java教程 正文

Java JVM虚拟机栈有关知识点(揭秘java虚拟机:jvm设计原理与实现)

temp10 2024-11-12 13:01:51 java教程 16 ℃ 0 评论

1、Java Virtual machine Stacks (Java虚拟机栈)

  • 每个线程运行时所需要的内存,称为虚拟机栈,先进后出
  • 每个栈有多个栈帧(frame)组成,对应这每次方法调用时所占用的内存
  • 每个线程只能有一个活动栈帧,对应着当期正在执行的那个方法

2、垃圾回收是否涉及栈内存?

  • 垃圾回收主要指就是堆内存,当栈帧弹栈以后,内存就释放了。

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

  • 未必,默认的栈内存通常为1024k。
  • 栈帧过大会导致线程数表少,例如:机器总内存为512M,目前能活动的线程数则为512个,如果把栈内存改为2048k,那么能活动的栈帧就会减半。

4、方法内的局部变量是否线程安全?

  • 如果方法内局部变量没有逃离方法的作用范围,他是线程安全的。
  • 如果是局部变量引用了对象,并逃离方法的作用范围,需要考虑线程安全。

5、什么情况下对导致栈内存溢出情况?

  • 栈帧过多导致栈内存溢出,典型问题:递归调用。
  • 栈帧过大导致栈内存溢出。

6、堆栈的区别是什么?

  • 栈内存一般会用来存储局部变量和方法的调用,但堆内存是用来存储Java对象和数组的,堆会GC垃圾回收,而栈不会。
  • 栈内存是线程私有的,而堆内存是线程共享的。
  • 两者异常错误不同,但如果栈内存或堆内存不足都会抛出异常:

占内存不足:java.lang.StackOverFlowError

堆内存不足:java.lang.OutOfMemoryError

Java JVM虚拟机栈有关知识点(揭秘java虚拟机:jvm设计原理与实现)

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表