gpt4 book ai didi

java - 默认堆栈大小是多少,它可以增长,它如何与垃圾收集一起工作?

转载 作者:IT老高 更新时间:2023-10-28 13:52:19 29 4
gpt4 key购买 nike

我了解每个线程都有自己的stack。原始类型和引用保存在堆栈上,并且没有对象保存在堆栈上。

我的问题是:

  • 堆栈可以增长多少? (就像参数 -Xms 和 -Xmx)
  • 我们可以限制它的增长吗?
  • 栈有默认的最小值和最大值吗?
  • 垃圾回收如何在堆栈上工作?

最佳答案

堆栈可以增长多少?

您可以使用名为 ss 的 VM 选项来调整最大堆栈大小。 VM 选项通常使用 -X{option} 传递。所以你可以使用 java -Xss1M 将堆栈大小的最大值设置为 1M。

每个线程至少有一个堆栈。一些 Java 虚拟机 (JVM) 将 Java 堆栈(Java 方法调用)和 native 堆栈(VM 中的 native 方法调用)放在一个堆栈中,并使用“Managed to Native Frame”执行堆栈展开,称为 M2nFrame .一些 JVM 分别保留两个堆栈。 Xss 在大多数情况下设置 Java Stack 的大小。

对于许多 JVM,他们在不同的平台上为堆栈大小设置了不同的默认值。


我们可以限制这种增长吗?

当发生方法调用时,将在该线程的堆栈上创建一个新的堆栈帧。堆栈将包含局部变量、参数、返回地址等。在 Java 中,您永远不能将对象放在堆栈上,只有对象引用可以存储在堆栈上。由于数组也是 Java 中的对象,因此数组也不存储在堆栈中。因此,如果您通过将局部原始变量和参数分组到对象中来减少它们的数量,则可以减少堆栈空间。实际上,我们不能显式地将对象放入 Java 堆栈这一事实会在一段时间内影响性能(缓存未命中)。


堆栈是否有一些默认最小值或默认最大值?

正如我之前所说,不同的虚拟机是不同的,并且可能会改变版本。见 here .


垃圾回收如何在栈上工作?

Java 中的垃圾收集是一个热门话题。垃圾收集旨在收集 heap 中无法访问的对象。所以这需要一个“可达”的定义。堆栈上的所有内容都构成了 GC 中根集引用的一部分。从每个线程的每个堆栈中可以访问的所有内容都应该被视为 Activity 的。还有一些其他的根集引用,例如 Thread 对象和一些类对象。

这只是 GC 上堆栈的一个非常模糊的用法。目前大多数 JVM 都在使用分代 GC。 This article简要介绍了 Java GC。最近我读到a very good article谈论.NET平台上的GC。 Oracle JVM 上的 GC 非常相似,所以我认为这也可能对您有所帮助。

关于java - 默认堆栈大小是多少,它可以增长,它如何与垃圾收集一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20030120/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com