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

JVM堆栈内存

龚德本
2023-03-14

我们Java开发人员有时会使用java-Xss1M来确保我们为每个特定于线程的堆栈提供了1MB的空间。现在,我经常感到困惑,JVM从哪里借用了1MB,从堆或系统内存中借用,或者Java为线程分配任何特定的内存。你能帮我理解一下吗?

此外,我们是否有一个可视化(插件)运行时工具,可以以可理解的方式显示堆和堆栈的内容?

提前感谢。

共有1个答案

微生翼
2023-03-14

JVM从哪里借用1 MB,从堆还是系统内存?

JVM从操作系统“借用”堆栈内存,所以也许这就是你所说的“系统内存”。JVM实际上从操作系统的虚拟内存系统中请求它用作线程堆栈空间的内存块。JVM使用的所有内存(代码、堆栈、堆等)都是以同样的方式从操作系统中请求的。堆栈内存与堆内存是分开的,堆内存由JVM自己管理。

有关JVM内存如何划分的更多信息,我想看看这个答案:java内存池是如何划分的?

此外,我们是否有一个可视化(插件)运行时工具,可以以可理解的方式显示堆和堆栈的内容?

如果您谈论的是堆内存的内容,那么应该查找有关内存分析器的信息。这是一个关于这个话题的好问题。这里还有一个关于这个主题的好教程。然而,我不确定这些工具是否会以“可理解的方式”向你展示记忆。它们用于定位内存泄漏或一般对象分配带宽问题。

没有显示堆栈内存的工具,因为它是基于不同线程的调用堆栈分配的,并且没有以易于调查的方式组织。

最后,为了了解JVM的各个部分使用了多少内存,您也可以使用j控制台。

 类似资料:
  • 问题内容: 每当加载一个类时,什么存储在堆中以及什么存储在堆栈中? 线程也驻留在哪里? 问题答案: 引用类型在堆中。 任何原始类型的数据和对堆上值(方法的参数/局部变量)的引用都在堆栈上。 每个线程都有自己的堆栈。 应用程序中的所有线程共享同一堆。

  • 我来自C/C++背景,在这里一个进程内存分为: null 我想把我的注意力集中在这一点上,当我阅读JVM中的堆和堆栈时,我们是在谈论堆栈和堆的概念吗?并且整个JVM的实际内存驻留在堆上(这里指的是堆的C++概念)?

  • 本文向大家介绍Java虚拟机JVM堆栈区,包括了Java虚拟机JVM堆栈区的使用技巧和注意事项,需要的朋友参考一下 以下是了解JVM堆栈区域的一些关键点- 在创建线程期间,Java虚拟机将创建一个单独的堆栈。 JVM在此堆栈上仅执行两个操作。操作是推入(即插入)和弹出(即删除)。 当前正在执行线程时,与其关联的堆栈称为运行时堆栈。 线程完成的每个方法调用,中间计算,局部变量的分配,调用参数等都作为

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

  • 问题内容: 是局部变量,将其存储在堆或堆栈中的何处? 问题答案: 在堆上。每当您用来创建对象时,它都会在堆上分配。

  • JVM规范表明JVM堆栈可以是固定大小的,也可以是动态扩展的。 -Xss JVM选项允许设置固定大小,如果我没有设置这个选项是设置默认值(大约512-2048k),但是如何告诉JVM在需要时动态分配它的堆栈呢? 如果我不能设置动态大小选项,那么设置一个大的Xss值(比如说20M)实际上会为JVM中的每个线程分配20MB内存吗?还是动态分配的内存会被限制在20MB?