美文网首页
JVM的内存布局?

JVM的内存布局?

作者: 嘘寒问暖 | 来源:发表于2022-04-28 23:25 被阅读0次
    内存布局

    Java虚拟机主要包含⼏个区域:

    堆:堆Java虚拟机中最⼤的⼀块内存,是线程共享的内存区域,基本上所有的对象实例数组都是在堆上分配空间。堆区细分为Young区年轻代和Old区⽼年代,其中年轻代⼜分为Eden、S0、S1 3个部分,他们默认的⽐例是8:1:1的⼤⼩。

    栈:栈是线程私有的内存区域,每个⽅法执⾏的时候都会在栈创建⼀个栈帧,⽅法的调⽤过程就对应着栈的⼊栈和出栈的过程。每个栈帧的结构⼜包含局部变量表、操作数栈、动态连接、⽅法返回地址。局部变量表⽤于存储⽅法参数和局部变量。当第⼀个⽅法被调⽤的时候,他的参数会被传递⾄从0开始的连续的局部变量表中。操作数栈⽤于⼀些字节码指令从局部变量表中传递⾄操作数栈,也⽤来准备⽅法调⽤的参数以及接收⽅法返回结果。动态连接⽤于将符号引⽤表示的⽅法转换为实际⽅法的直接引⽤。

    元数据:在Java1.7之前,包含⽅法区的概念,常量池就存在于⽅法区(永久代)中,⽽⽅法区本身是⼀个逻辑上的概念,在1.7之后则是把常量池移到了堆内,1.8之后移出了永久代的概念(⽅法区的概念仍然保留),实现⽅式则是现在的元数据。它包含类的元信息和运⾏时常量池。Class⽂件就是类和接⼝的定义信息。运⾏时常量池就是类和接⼝的常量池运⾏时的表现形式。

    本地⽅法栈:主要⽤于执⾏本地native⽅法的区域

    程序计数器:也是线程私有的区域,⽤于记录当前线程下虚拟机正在执⾏的字节码的指令地址

    相关文章

      网友评论

          本文标题:JVM的内存布局?

          本文链接:https://www.haomeiwen.com/subject/jzyjyrtx.html