首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java堆栈在哪里分配?

Java堆栈在哪里分配?
EN

Stack Overflow用户
提问于 2012-06-14 01:07:28
回答 2查看 1.9K关注 0票数 17

我从一个网站中注意到以下几点: JVM HotSpot内存被分成三个内存空间:

  • PermGen (永久世代)空间
  • 本地堆(C)

在hotSpot JVM中分配的堆栈在哪里?在本地堆里?

更新:另一个参考信息:对于64位VM,C容量=物理服务器总内存和虚拟内存- Java PermGen。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-14 01:22:37

答案是:

  1. 它依赖于实现。在我查看的实现中,线程堆栈分配是由标准C本机线程库处理的,看起来库要到OS为堆栈分配一个内存段。
  2. 您可以通过深入研究与您的平台相关的OpenJDK源代码来确认这一点。

更新

从一个老问题来看,下面是pthread_create中请求分配线程堆栈的代码片段。JVM线程实现用来创建本机线程的方法。

代码语言:javascript
运行
复制
 mmap(0, attr.__stacksize, 
     PROT_READ|PROT_WRITE|PROT_EXEC, 
     MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)

如您所见,它只是使用mmap系统调用从操作系统请求内存段。正如我在注释中所说的,这不是常规Java堆,也不是Permgen堆,也不是C本机堆。它是从操作系统中专门请求的一段内存。

作为参考,这里有一个指向mmap syscall manual entry的链接。

更新:另一个参考信息:对于64位VM,C容量=物理服务器总内存和虚拟内存- Java PermGen

海事组织,这太简单化了。(请提供一个链接到你发现这些信息的地方.这样我们才能读到它原来的形式。)

票数 25
EN

Stack Overflow用户

发布于 2012-06-22 18:53:03

如果您可以以任何方式找到对这些事情的访问权限,那么第二个Sun (或者Oracle现在是adays?)很快就会发出补丁。

能够访问这些东西是一个巨大的安全风险。很多大公司的系统都使用Java。在有可能找到分配空间的地方留下一个洞是不可能的。

如上所述,MMAP将分配空间并将其返回给所需的程序和空间需求。我几乎每天都用MMAP做很多事情。

也许是因为我认为在如何使用(以更好地保护我的系统)方面,我认为事情会变得更黑暗,所以肯定会有一个很好的解决办法来抵消你的工作,或者你会让美国世界警察队在你的门口敲你的门,怀疑你有不正当的行为,并在这个过程中没收你所有的设备。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11025459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档