小编典典

最后我知道在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堆的最大大小是固定的?相关推荐

  1. JVM - 结合代码示例彻底搞懂Java内存区域_对象在堆-栈-方法区(元空间)之间的关系

    文章目录 Pre 示例demo 总体关系 代码示例论证 反汇编 Pre JVM - 结合代码示例彻底搞懂Java内存区域_线程栈 | 本地方法栈 | 程序计数器 中我们探讨了线程栈中的内部结构 ,大家 ...

  2. java内存修改_修改java虚拟机启动内存大小

    在运行java桌面应用程序的时候,有时候会因为jvm内存太小,从而内存溢出,程序崩溃. 可是通过修改 eclipse.ini 中的参数,来实现修改jvm的内存大小. -vmargs -Xms128M ...

  3. java使用ByteBuffer.allocateDirect分配的堆外内存大小查看方法

    一.问题 在java开发中,可以使用ByteBuffer.allocateDirect分配的堆外内存,那么对一个java程序来说,如何实时查看进程的堆外内存大小呢? 二.本机进程 1.使用Jvisua ...

  4. java数组规定长度_为什么Java数组固定长度?

    正如其他答案所指出的那样,固定大小是定义的一部分,你必须与原作者交谈才能找到真相. 但是作为一般观点,实现可变长度容器要复杂得多,并且有很多策略可以实现它(链表,内存重新分配-). 如果作者在20世纪 ...

  5. java array缓存_有java数组

    [JAVA零基础入门系列]Day10 Java中的数组 [JAVA零基础入门系列](已完结)导航目录 Day1 开发环境搭建 Day2 Java集成开发环境IDEA Day3 Java基本数据类型 D ...

  6. java perm 查看_高级 Java 必须掌握:JVM 分析工具和查看命令,超详细

    jinfo 可以输出并修改运行时的java 进程的opts. jps 与unix上的ps类似,用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程号. jstat 一个极强 ...

  7. java jmap 分析_利用java虚拟机的工具jmap分析java内存情况

    有时候碰到性能问题,比如一个java application出现out of memory,出现内存泄漏的情况,再去修改bug可能会变得异常复杂,利用工具去分析整个java application 内 ...

  8. java内存漏洞_处理Java程序中的内存漏洞

    Java 程序中也有内存漏洞?当然有.与流行的观念相反,在 Java 编程中,内存治理仍然是需要考虑的问题.在本文中,您将了解到什么会导致内存漏洞以及何时应该关注这些漏洞.您还有机会实践一下在您自己的 ...

  9. java核心教程_核心Java教程

    java核心教程 Welcome to Core Java Tutorial. I have written a lot on Core Java and Java EE frameworks. Th ...

  10. java 包命名_【Java】包的命名规则

    命名规范 包:所有单词的字母小写,之后每个单词用-隔开,如 org.nemo.demo 常量:所有单词的字母大写,之后每个单词用_隔开,如 FLAG 类:所有单词的首字母大写,如 TestJava p ...

最新文章

  1. 首款AI+智能工程头盔发布,小松(中国)与天远科技ICT战略签约成功举行
  2. 隆重介绍!一款新型基于姿势的人像实例分割框架
  3. Nancy之基于Self Hosting的补充小Demo
  4. spring mvc 中对静态资源的访问配置
  5. 工业交换机有哪些功能?
  6. Spring中的计时器StopWatch
  7. Java私塾的一些基础练习题(一)
  8. SQL Server SQL高级查询语句小结(转)
  9. 【博客项目】—案例初始化(二)
  10. c语言三个月兴业,c语言输出2015年日历,要求三个月在一行...
  11. 一点SICP(Structure and Interpretation of Computer Programs) 资料 (转载加整理)
  12. 易班自动答题脚本_Python实现手机APP之自动打卡签到详细教程(小白合适)
  13. CMake macOS安装
  14. 京东数据分析SQL面试题
  15. 谈谈我对《ThoughtWorks文集》中多语言开发部分的看法
  16. 【摄影测量原理】第一章:摄影测量学基础
  17. 打造海报视觉效果—利用图层模式调色
  18. 关于ArcGIS的入门建议
  19. 高长勇老师:如何去构建企业的魂
  20. 计算机网络课设-电子邮件客户端程序设计与实现(C/C++语言)

热门文章

  1. polycom安卓手机客户端_安卓 emoji 表情:全变了
  2. [MySQL] mysql 的行级显式锁定和悲观锁
  3. Redis基础数据结构
  4. C++中栈内存和堆内存
  5. 2017 3月21日,下午
  6. Linux常用命令大全(五)
  7. Linux 7 关闭、禁用防火墙服务
  8. PowerDNS管理工具开发中学习到的DNS知识
  9. PHP操作Memcache实例介绍
  10. 百度分享自定义内容和图片