java 大小固定_为什么Java堆的最大大小是固定的?
小编典典
最后我知道在Sun的JVM中,必须在连续的地址空间中分配整个堆。我想对于大堆值,很难在启动后将其添加到您的地址空间中,同时又要确保它保持连续。您可能需要在启动时获取它,或者根本不需要。因此,它是固定的。
即使不是立即全部使用,启动时也会保留整个堆的地址空间。如果它不能为传递的-
Xmx值保留足够大的连续地址空间块,它将无法启动。这就是为什么很难在32位Windows上分配大于1.4GB的堆的原因-
因为很难找到该大小或更大大小的连续地址空间,因为某些DLL喜欢在某些地方加载,从而使地址空间碎片化。当您使用64位时,这并不是真正的问题,因为有更多的地址空间。
这几乎可以肯定是出于性能方面的考虑。我找不到很棒的链接来详细说明这一点,但是这是我在搜索时找到的彼得·凯斯勒(Peter
Kessler)的一个不错的报价(完整链接
-请务必阅读评论)。我相信他在Sun的JVM上工作。
之所以需要为堆使用连续的内存区域,是因为我们有一堆副数据结构,这些数据结构从堆开始处按(缩放的)偏移量进行索引。例如,我们使用“卡片标记数组”跟踪对象引用更新,该“卡片标记数组”每512字节堆有一个字节。当我们将引用存储在堆中时,我们必须在卡标记数组中标记相应的字节。我们右移商店的目标地址,并用它来索引卡标记阵列。用C
++玩(必须:-)玩Java不能解决的有趣的算术游戏。
那是在2004年-我不确定此后发生了什么变化,但是我很确定它仍然成立。如果您使用诸如Process
Explorer之类的工具,则可以看到Java应用程序的虚拟大小(添加虚拟大小和私有大小内存列)从启动时就包括了总堆大小(无疑还有其他所需的空间)。
,即使该进程“使用”的内存在堆开始填满之前也离它不远…
2020-10-20
java 大小固定_为什么Java堆的最大大小是固定的?相关推荐
- JVM - 结合代码示例彻底搞懂Java内存区域_对象在堆-栈-方法区(元空间)之间的关系
文章目录 Pre 示例demo 总体关系 代码示例论证 反汇编 Pre JVM - 结合代码示例彻底搞懂Java内存区域_线程栈 | 本地方法栈 | 程序计数器 中我们探讨了线程栈中的内部结构 ,大家 ...
- java内存修改_修改java虚拟机启动内存大小
在运行java桌面应用程序的时候,有时候会因为jvm内存太小,从而内存溢出,程序崩溃. 可是通过修改 eclipse.ini 中的参数,来实现修改jvm的内存大小. -vmargs -Xms128M ...
- java使用ByteBuffer.allocateDirect分配的堆外内存大小查看方法
一.问题 在java开发中,可以使用ByteBuffer.allocateDirect分配的堆外内存,那么对一个java程序来说,如何实时查看进程的堆外内存大小呢? 二.本机进程 1.使用Jvisua ...
- java数组规定长度_为什么Java数组固定长度?
正如其他答案所指出的那样,固定大小是定义的一部分,你必须与原作者交谈才能找到真相. 但是作为一般观点,实现可变长度容器要复杂得多,并且有很多策略可以实现它(链表,内存重新分配-). 如果作者在20世纪 ...
- java array缓存_有java数组
[JAVA零基础入门系列]Day10 Java中的数组 [JAVA零基础入门系列](已完结)导航目录 Day1 开发环境搭建 Day2 Java集成开发环境IDEA Day3 Java基本数据类型 D ...
- java perm 查看_高级 Java 必须掌握:JVM 分析工具和查看命令,超详细
jinfo 可以输出并修改运行时的java 进程的opts. jps 与unix上的ps类似,用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程号. jstat 一个极强 ...
- java jmap 分析_利用java虚拟机的工具jmap分析java内存情况
有时候碰到性能问题,比如一个java application出现out of memory,出现内存泄漏的情况,再去修改bug可能会变得异常复杂,利用工具去分析整个java application 内 ...
- java内存漏洞_处理Java程序中的内存漏洞
Java 程序中也有内存漏洞?当然有.与流行的观念相反,在 Java 编程中,内存治理仍然是需要考虑的问题.在本文中,您将了解到什么会导致内存漏洞以及何时应该关注这些漏洞.您还有机会实践一下在您自己的 ...
- java核心教程_核心Java教程
java核心教程 Welcome to Core Java Tutorial. I have written a lot on Core Java and Java EE frameworks. Th ...
- java 包命名_【Java】包的命名规则
命名规范 包:所有单词的字母小写,之后每个单词用-隔开,如 org.nemo.demo 常量:所有单词的字母大写,之后每个单词用_隔开,如 FLAG 类:所有单词的首字母大写,如 TestJava p ...
最新文章
- 首款AI+智能工程头盔发布,小松(中国)与天远科技ICT战略签约成功举行
- 隆重介绍!一款新型基于姿势的人像实例分割框架
- Nancy之基于Self Hosting的补充小Demo
- spring mvc 中对静态资源的访问配置
- 工业交换机有哪些功能?
- Spring中的计时器StopWatch
- Java私塾的一些基础练习题(一)
- SQL Server SQL高级查询语句小结(转)
- 【博客项目】—案例初始化(二)
- c语言三个月兴业,c语言输出2015年日历,要求三个月在一行...
- 一点SICP(Structure and Interpretation of Computer Programs) 资料 (转载加整理)
- 易班自动答题脚本_Python实现手机APP之自动打卡签到详细教程(小白合适)
- CMake macOS安装
- 京东数据分析SQL面试题
- 谈谈我对《ThoughtWorks文集》中多语言开发部分的看法
- 【摄影测量原理】第一章:摄影测量学基础
- 打造海报视觉效果—利用图层模式调色
- 关于ArcGIS的入门建议
- 高长勇老师:如何去构建企业的魂
- 计算机网络课设-电子邮件客户端程序设计与实现(C/C++语言)