JVM内存结构

JVM虚拟机在执行java程序的过程中会把它所管理的内存划分为若干个不同是数据区域,这些区域有各自各自的用途。主要包含以下几个部分组成:

image.png
image.png
  1. 程序计数器占用的内存空间我们可以忽略不计,它是每个线程所执行的字节码的行号指示器。
  2. 虚拟机栈是线程私有的,生命周期和线程相同。它描述的是方法执行的内存模型。同时用于存储局部变量、操作数栈、动态链接、方法出口等。
  3. 本地方法栈,类似虚拟机栈,它调用的是是native方法。
  4. 堆是jvm中管理内存中最大一块。它是被共享,存放对象实例,也被称为“gc堆”。垃圾回收的主要管理区域。 由年轻代和老年代组成,而年轻代内存又被分成三部分,Eden空间、From Survivor空间、To Survivor空间,默认情况下年轻代按照8:1:1的比例来分配。
  5. 方法区也是共享的内存区域。它主要存储已被虚拟机加载的类信息、常量、静态变量、即时编译器(jit)编译后的代码数据。
image.png

控制参数
-Xms设置堆的最小空间大小。
-Xmx设置堆的最大空间大小。
-XX:NewSize设置新生代最小空间大小。
-XX:MaxNewSize设置新生代最大空间大小。
-XX:PermSize设置永久代最小空间大小。
-XX:MaxPermSize设置永久代最大空间大小。
-Xss设置每个线程的堆栈大小。
老年代空间大小=堆空间大小-年轻代大空间大小

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 所有的Java开发人员可能会遇到这样的困惑?我该为堆内存设置多大空间呢?OutOfMemoryError的异常到底...
    Java_Explorer阅读 3,649评论 0 21
  • 所有的Java开发人员可能会遇到这样的困惑?我该为堆内存设置多大空间呢?OutOfMemoryError的...
    夏末为央阅读 2,817评论 0 0
  • 声明:原创文章,转载请注明出处。http://www.jianshu.com/u/e02df63eaa87 1、J...
    唐影若凡阅读 2,885评论 1 3
  • 索引:堆、栈、方法区、直接内存、堆和栈区别 所有的Java开发人员可能会遇到这样的困惑?我该为堆内存设置多大空间呢...
    逢栲怭過阅读 2,934评论 0 0
  • 有没有人和我一样,猛的一天发现环境对自己的发展很有必要,然后就开始注意周围的环境,观察着与他人是否与别人有什么...
    OITwqq阅读 1,579评论 0 0