当前位置: 首页 > 面试题库 >

“调用堆栈”和“线程堆栈”之间的区别

严扬
2023-03-14
问题内容

在Java多线程中,术语call stack和之间在语义上有区别thread stack吗?


问题答案:

每个线程都有自己的调用堆栈,“调用堆栈”和“线程堆栈”是同一件事。将其称为“线程堆栈”只是强调了调用堆栈特定于线程。

Bill Venners将此称为Java堆栈:

启动新线程时,Java虚拟机将为该线程创建一个新的Java堆栈。如前所述,Java堆栈将线程的状态存储在离散的帧中。Java虚拟机仅直接在Java堆栈上执行两项操作:推送和弹出框架。

线程当前正在执行的方法是线程的当前方法。当前方法的堆栈框架是当前框架。定义当前方法的类称为当前类,当前类的常量池为当前常量池。在执行方法时,Java虚拟机会跟踪当前类和当前常量池。当虚拟机遇到对存储在堆栈帧中的数据进行操作的指令时,它将在当前帧上执行这些操作。

当线程调用Java方法时,虚拟机将创建一个新框架并将其推送到线程的Java堆栈上。然后,该新帧成为当前帧。该方法执行时,它使用框架来存储参数,局部变量,中间计算和其他数据。



 类似资料:
  • 本文向大家介绍Java中的堆栈和堆内存之间的区别,包括了Java中的堆栈和堆内存之间的区别的使用技巧和注意事项,需要的朋友参考一下 JVM将内存空间分为两部分,一个是堆栈,另一个是堆空间。堆栈空间主要用于存储方法执行的顺序和局部变量。 堆栈始终按照LIFO顺序存储块,而堆内存使用动态分配来分配和取消分配内存块。  分配给堆的内存将一直存在,直到发生以下事件之一: 程序终止  无记忆  相反,分配给

  • 问题内容: 内核堆栈和用户堆栈有什么区别?为什么要使用内核堆栈?如果在ISR中声明了局部变量,它将存储在哪里?每个进程都有自己的内核堆栈吗?那么,进程如何在这两个堆栈之间进行协调? 问题答案: 内核堆栈和用户堆栈有什么区别? 简而言之,除了在内存中使用不同的位置(并因此为堆栈指针寄存器使用不同的值)之外,什么也没有,而且通常使用不同的内存访问保护。也就是说,在用户模式下执行时,即使映射了内核内存(

  • 本文向大家介绍堆栈区别相关面试题,主要包含被问及堆栈区别时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 堆和栈的区别: 一、堆栈空间分配区别: 1)、栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈; 2)、堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。 二、堆栈缓存方式

  • 本文向大家介绍iOS堆和栈的区别 ?相关面试题,主要包含被问及iOS堆和栈的区别 ?时的应答技巧和注意事项,需要的朋友参考一下 管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制;对于堆来说,释放工作由程序员控制,容易产生memory leak。 申请大小: 栈:在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的

  • 本文向大家介绍C 堆和栈的区别相关面试题,主要包含被问及C 堆和栈的区别时的应答技巧和注意事项,需要的朋友参考一下 (1)申请方式 stack: 由系统自动分配。例如,声明在函数中一个局部变量 int b; 系统自动在栈中为b开辟空间 heap: 需要程序员自己申请,并指明大小,在c中malloc函数 (2)申请后系统的响应 栈:只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提

  • 本文向大家介绍C#中堆和栈的区别?相关面试题,主要包含被问及C#中堆和栈的区别?时的应答技巧和注意事项,需要的朋友参考一下 答 栈:由编译器自动分配、释放。在函数体中定义的变量通常在栈上。 堆:一般由程序员分配释放。用new、malloc等分配内存函数分配得到的就是在堆上。   存放在栈中时要管存储顺序,保持着先进后出的原则,他是一片连续的内存域,有系统自动分配和维护; 堆是无序的,他是一片不连续