当前位置: 首页 > 知识库问答 >
问题:

一个正在运行的JVM程序中有多少种类型的堆栈?

督灿
2023-03-14

问题很明显。当我准备好JVM规范时,我遇到了Java堆栈

“2.5.2 Java虚拟机堆栈”

每个Java虚拟机线程都有一个私有Java虚拟机堆栈,与线程同时创建。Java虚拟机堆栈存储帧(§2.6)。Java虚拟机堆栈类似于C等传统语言的堆栈:它保存局部变量和部分结果,并在方法调用和返回中发挥作用。由于Java虚拟机堆栈除了用于推送和弹出帧之外,从未被直接操作,因此帧可能是堆分配的。Java虚拟机堆栈的内存不需要是连续的。

那么,除了线程堆栈之外,还有什么类型的堆栈可以使用,或者我们可以分类吗?

共有1个答案

井嘉胜
2023-03-14

规范中的某些堆栈类型包括:

1) 操作数堆栈:每个帧包含一个后进先出(LIFO)堆栈,称为其操作数堆栈。帧的操作数堆栈的最大深度在编译时确定,并随与帧关联的方法的代码一起提供。

2) 本机方法堆栈:Java虚拟机的实现可以使用传统堆栈(俗称“C堆栈”)来支持本机方法(用Java编程语言以外的语言编写的方法)。本机方法栈也可以由解释器的实现来使用,解释器用于Java虚拟机的指令集,其语言为C。无法加载本机方法且自身不依赖于传统栈的Java虚拟机实现不需要提供本机方法栈。如果提供,则在创建每个线程时,通常会为每个线程分配本机方法堆栈。

3) Java虚拟机堆栈:你在问题中提到过。

 类似资料:
  • spark.executor.cores=2 spark.executor.memory=10GB 现在Spark在每个worker节点上启动一个Executor的JVM,对吗? 然后,在第一个会话使用configs进行之前,启动另一个Spark应用程序/会话 JVM的开销有多大?我的意思是,在用例2中,节点的RAM被分成7个JVM时,有多少RAM不会用于计算目的?

  • 问题内容: 今天在面试中,我被要求编写代码来确定在Java运行时类的多少实例退出。 我告诉他们,我们可以利用反思。请告诉我您是否有有效的方法。 问题答案: 我认为反思不会帮助您。有JVMTI(以及较早且现在已不存在的JVMPI)可用于分析堆并确定类的当前实例数。 一种编码的替代方法是向您要跟踪以下实例的类添加一个计数器: 这将跟踪曾经创建的实例数量,并且是线程安全的。要了解何时对实例进行垃圾回收,

  • 问题内容: 我想反序列化JSON(使用Jackson 1.9.11和RestTemplate 1.0.1),其中一个字段可能具有更多类型含义,例如: 要么 一个或另一种情况对于一个特定类型的设置器(String od custom Response类)都可以正常工作,但是当我将实体bean重写的设置器放入能够处理这两种情况时,将引发异常: 我当时在考虑三种解决方案,但没有任何一种可行: 仅使用St

  • 我有一个多Maven模块Spring Boot项目,具有以下结构: webservices和backend都是单独的Spring Boot应用程序(它们生成一个jar文件,我用它来启动它们),它们依赖于commons模块。因此,我将commons作为一个依赖项包含在webservices和后端的pom中。xml。 我对启动我的应用程序没有什么疑问。 如何在单个JVM中启动后端和webservice

  • 现在我有了一个,它表示在特定时间板上当前的所有块。 我需要数一下一种类型有多少件,比如白车,黑皇后等,但正常的做法会变得太长,而且看起来很难看。我就是这么做的... 必须有一种更优雅的方法来实现这一点,它需要更少的代码行。我的意思是如果有超过6种类型的碎片和2种类型的颜色。我不能一直像这样给switch语句添加大小写,对吧?但我想不出怎样才能让它更优雅。

  • 问题内容: 如何在一台机器上运行多个JVM?您如何在其他JVM中调用方法? 问题答案: 如何在一台机器上运行多个JVM? 只需启动多个进程即可。 您如何在其他JVM中调用方法? 使用任何类型的RPC框架(RMI,EJB,Web服务等)。