美文网首页
日更挑战-java虚拟机之内存模型

日更挑战-java虚拟机之内存模型

作者: 愿你我皆是黑马 | 来源:发表于2021-05-24 23:57 被阅读0次

越不懂的越爱装
大家都同等:IT世界没有难不难,只有是否了解过

挑战目录

什么是内存模型

内存模型是为了解释在程序运行时的内存数据结构的构成情况。java中每个java程序都会开启一个进程。同时会对应一个java虚拟机。下面就是一个java虚拟机的数据区域的基础构成。


基础的java虚拟机数据区构成

其中蓝色区域是线程共享的,红色区域时线程独有的(随着线程的创建而创建,销毁而销毁),下面是当虚拟机中有多个线程时的数据区构成。每个大的红框表示一个线程独有的数据区域。


多线程时的java虚拟机数据区构成

上面每个都是什么?

  • 方法区:

    方法区
  1. Class文件结构:是所有线程的共享区域,存储class类文件加载后的类模板数据(不是new出来的实例.而是相当于类模板数据)。
    可以使用十六进制文本工具查看.class文件,其中的的顺序分别代表如下:
类型 名称 数量 功能
4个字节的无符号数 maginc 1=0xCAFEBABE 魔术:确定这个文件是否为一个<br />能被虚拟机接受的Class文件
2个字节的无符号数 MinorVersion 1= 次版本号:和JDK的版本相关联
2个字节的无符号数 MajorVersion 1= 主版本号:和JDK的版本相关联
2个字节的无符号数 constant_pool_count 1=0号位常量+真实常量数 常量池入口:代表常量池中常量的总个数<br />第0个常量被留出来做特殊考虑,所以<br />常量池的计数是从1开始的
cp表格 constant_pool 常量池入口数-1 常量池表格:存放常量地址1<br />每个常量的耗费空间和存储的类型有关
2个字节的无符号数 access_flags 1=
2个字节的无符号数 this_class 1=
2个字节的无符号数 super_class 1=
2个字节的无符号数 interfaces_count 1=
2个字节的无符号数 interfaces interfaces_count个
2个字节的无符号数 fields_count 1=
fields_info fields fields_count个
2个字节的无符号数 methods_count 1
method_info methods methods_count个
2个字节的无符号数 attributes_count 1=
attributes_info attributes attributes_count个
  1. 运行时常量池(存储编译时期生成的字面量、符号引用和直接引用)
    字面量: 类中的静态变量,字符串。但是java8 将 静态变量 、StringTable 都从方法区移动到 堆中,主 要是想进行GC。方法区也能GC,但只能full GC,频率会很低。
    符号引用:
    直接引用:
  • 是所有线程的共享区域,存储class的实例对象。


    java堆
    1. Eden区:
    2. Survivor区:
    3. Old区:

    堆内存的大小:虚拟分配大小,并不会把这么大的内存空间锁定占据了(不会出现启动多个空的jar把内存耗光)

    1. 堆内存分配:
    • 由-Xms指定,默认物理内存的1/64。最大内存由-Xmx指定,默认物理内存的1/4。
    • 空余堆内存小于40%时,会增大直到-Xmx的最大限制;空余堆内存大于70%时,会减少堆直到-Xms的最小限制
    • 服务器一般设置-Xms、-Xmx相等以避免在每次GC后调整堆的大小
    1. 非堆内存分配
    • 由-XX:PermSize设置内存初始值,默认是物理内存的1/64;
    • 由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4

    3.JVM最大内存

    • 限制于实际的最大物理内存
    • 限制于操作系统位数:64位无限制,32位限制一般是2GB-3GB(一般来说Windows系统下为1.5G-2G,Linux系统下为2G-3G)
  • 程序计数器
image.png
  • Java虚拟机栈
image.png
  • 本地方法栈

与Java虚拟机类似,不过这个是用来执行native方法时使用的。

相关文章

  • 并发编程(一)—— volatile关键字和 atomic包

    Java内存模型 JMM(java内存模型) java虚拟机有自己的内存模型(Java Memory Model,...

  • Java内存模型

    Java内存模型 主内存和工作内存 Java虚拟机规范中定义了Java内存模型(Java Memory Model...

  • 深入理解volatile

    JMM Java 内存模型 Java的内存模型指定了Java虚拟机如何与计算机的内存进行工作 Java内存模型决定...

  • 37-Java内存模型

    Java内存模型 Java内存模型即Java Memory Model,简称JMM。JMM定义了Java 虚拟机(...

  • 【转】Java 内存模型

    转自Java 内存模型 Java 内存模型规范了 Java 虚拟机与计算机内存是如何协同工作的。Java 虚拟机是...

  • Java内存模型和垃圾回收

    1、 Java虚拟机内存模型 Java虚拟机内存模型是Java程序运行的基础。为了能使java应用程序正常运行,...

  • Java运行时数据区

    Java内存模型 Java内存模型,就是Java程序运行时的内存模型。而Java代码是在Java虚拟机上运行的,由...

  • java内存模型

    1.Java内存模型的概念 Java内存模型(Java Memory Model,JMM)是java虚拟机规范定义...

  • Happens-Before和Volatile关键字解析

    Java内存模型 Java虚拟机中试图定义一种Java内存模型(Java Memory Model,JMM)来屏蔽...

  • 【JAVA提升】- Java内存模型

    1 什么是java内存模型 Java虚拟机规范中定义了Java内存模型(Java Memory Model,JMM...

网友评论

      本文标题:日更挑战-java虚拟机之内存模型

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