java 如何分配线程_内存-Java(JVM)如何为每个线程分配堆栈

Java规范告诉我们有关线程堆栈的一些信息。 除其他事项外:

每个Java虚拟机线程都有一个私有Java虚拟机堆栈,与该线程同时创建。

因为除了推送和弹出框架外,从不直接操纵Java虚拟机堆栈,所以可以为堆分配帧。 Java虚拟机堆栈的内存不必是连续的。

规范允许Java虚拟机堆栈具有固定大小,或根据计算要求动态扩展和收缩。

现在,如果我们专注于诸如HotSpot之类的JVM实现,我们可以获得更多信息。 这是我从不同来源收集到的一些事实:

HotSpot中线程的最小堆栈大小似乎是固定的。 这就是上述native选项的作用。(资源)

在Java SE 6中,Sparc的默认值在32位VM中为512k,在64位VM中为1024k。 ...您可以通过使用-Xss选项来减小堆栈大小。 ... 64k是每个线程允许的最小堆栈空间量。

JRockit将内存与堆栈所在的堆分开分配。 (资源)

请注意,JVM使用的内存不仅仅是堆。 例如,Java方法,线程堆栈和本机句柄与堆以及JVM内部数据结构分开分配在内存中。

HotSpot中的Java线程和本机OS线程之间存在直接映射。 (资源)。

但是HotSpot中的Java线程堆栈是由软件管理的,而不是OS本机线程堆栈。 (资源)

它使用单独的软件堆栈来传递Java参数,而本地C堆栈由VM本身使用。 许多JVM内部变量(例如Java线程的程序计数器或堆栈指针)存储在C变量中,不能保证始终将其保留在硬件寄存器中。 这些软件解释器结构的管理消耗了总执行时间的相当大的份额。

JVM还为本地方法和JVM运行时调用(例如类加载)使用相同的Java线程堆栈。 (资源)。

有趣的是,作为性能优化,甚至分配

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值