美文网首页
详细jvm内存模型

详细jvm内存模型

作者: Jeffery大侠 | 来源:发表于2019-09-26 21:03 被阅读0次

https://www.cnblogs.com/rinack/p/9888692.html

主图 参考图

jvm内存一共可分为三大块:堆内存,栈内存,方法区(Perm)

       堆内存包含:新生代(eden,from survivor, to survivor)+老年代;

       栈内存包含:虚拟机栈+本地方法栈

堆内存(Heap)

     1:线程共享,在虚拟机启动时创建。

     2:此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。

     3:堆内存是所有线程共有的,可以分为两个部分:年轻代和老年代。

       (下图中的Perm代表的是永久代,但是注意永久代并不属于堆内存中的一部分,同时jdk1.8之后永久代已经被移除。)

     新生代 ( Young ) 与老年代 ( Old ) 的比例的值为 1:2 ( 该值可以通过参数 –XX:NewRatio 来指定 )

     默认的,Eden : from : to = 8 : 1 : 1 ( 可以通过参数 –XX:SurvivorRatio 来设定 ),即: Eden = 8/10 的新生代空间大小,from = to = 1/10 的新生代空间大小。

栈内存

虚拟机栈(JVM Stack)

描述的是java方法执行的内存模型:每个方法被执行的时候都会创建一个"栈帧",用于存储局部变量表(包括参数)、操作栈、方法出口等信息。每个方法被调用到执行完的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。

本地方法栈(Native Stack)

本地方法栈(Native Method Stacks)与虚拟机栈所发挥的作用是非常相似的,其区别不过是虚拟机栈为虚拟机执行Java方法(也就是字节码)服务,而本地方法栈则是为虚拟机使用到的Native方法服务

程序计数器(PC Register)

1:程序计数器是用于标识当前线程执行的字节码文件的行号指示器。

2:多线程情况下,每个线程都具有各自独立的程序计数器,所以该区域是非线程共享的内存区域。

3:当执行java方法时候,计数器中保存的是字节码文件的行号;当执行Native方法时,计数器的值为空。

直接内存

直接内存并不是虚拟机内存的一部分,也不是Java虚拟机规范中定义的内存区域。jdk1.4中新加入的NIO,引入了通道与缓冲区的IO方式,它可以调用Native方法直接分配堆外内存,这个堆外内存就是本机内存,不会影响到堆内存的大小。

相关文章

  • JVM基础知识点

    1. 内存模型以及分区,需要详细到每个区放什么(共分为5个)。 JVM内存模型及分区jvm内存模型和内存分配 程序...

  • JVM内存模型(jvm 入门篇)

    概述 jvm 入门篇,想要学习jvm,必须先得了解JVM内存模型,JVM内存模型,JVM内存模型,JVM内存模型,...

  • JVM面试题总结

    1.详细jvm内存模型 根据JVM规范,JVM内存模型分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分。 ...

  • 详细jvm内存模型

    https://www.cnblogs.com/rinack/p/9888692.html jvm内存一共可分为三...

  • 浅析jvm与jmm模型结构与关系

    java内存模型(以下简称jmm)和java虚拟机模型(以下简称jvm)之间的关系,下面将详细讲述。 一 jvm结...

  • JVM

    栈容量由-Xss指定深入理解JVM—JVM内存模型 JVM内存模型和JVM参数的关系

  • [Java多线程编程之八] Java内存模型

    一、Java内存模型 == JVM内存模型?   很多人都会认为Java内存模型就是JVM内存模型,但实际上是错的...

  • JVM问题及解答

    常见JVM问题 JVM内存模型,GC机制和原理。注意JVM内存模型与Java内存模型(JMM)不是同一个东西。JV...

  • JVM内存模型,详细图解

  • JVM内存结构和Java内存模型

    最近看到两个比较容易混淆的概念:JVM内存结构和Java内存模型 JVM内存结构JVM内存结构或者说内存模型指的是...

网友评论

      本文标题:详细jvm内存模型

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