image

编辑人: 青衫烟雨

calendar2025-06-30

message7

visits978

描述一下 JVM 的内存结构?

分析&回答

1.7 OR 1.8 JVM内存结构

image-1691385277853

1.8 JVM内存结构

image-1691385286808

JVM控制参数

先看一张图,这张图能很清晰的说明JVM内存结构的布局和相应的控制参数:

image-1691385296306

控制参数:

  • 堆(Heap):
    • -Xms 设置堆的最小空间大小。
    • -Xmx 设置堆的最大空间大小。
    • -XX:NewSize 设置新生代最小空间大小。
    • -XX:MaxNewSize 设置新生代最大空间大小。
    • 没有直接设置老年代的参数,但是可以设置堆空间大小和新生代空间大小两个参数来间接控制。
      • 老年代空间大小=堆空间大小-年轻代大空间大小
  • 方法区
    • -XX:PermSize 设置永久代最小空间大小。
    • -XX:MaxPermSize 设置永久代最大空间大小。
  • 栈/本地方法栈
    • -Xss 设置每个线程的堆栈大小。

反思&扩展

永久代为什么被替换了

表面上看是为了避免OOM异常。因为通常使用PermSize和MaxPermSize设置永久代的大小就决定了永久代的上限,但是不是总能知道应该设置为多大合适, 如果使用默认值很容易遇到OOM错误。

当使用元空间时,可以加载多少类的元数据就不再由MaxPermSize控制, 而由系统的实际可用空间来控制。

更深层的原因还是要合并HotSpot和JRockit的代码,JRockit从来没有所谓的永久代,也不需要开发运维人员设置永久代的大小,但是运行良好。同时也不用担心运行性能问题了,在覆盖到的测试中, 程序启动和运行速度降低不超过1%,但是这点性能损失换来了更大的安全保障。


喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!

创作类型:
原创

本文链接:描述一下 JVM 的内存结构?

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。
分享文章
share