b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

java虚拟机JVM内存模型-上海怡健医学()

电脑杂谈  发布时间:2021-02-05 22:05:09  来源:网络整理

JVM内存模型:

jvm内存模型

从这张图可以直观地看出,程序计数器,虚拟机堆栈和本机堆栈是线程专用的,堆是由线程共享的。现在,我们将详细介绍JVM的每个块。

1.堆(堆)

是java虚拟机管理的内存中最大的内存区域,也是每个线程共享的内存区域。该存储区存储对象实例和数组(但并非所有对象实例都在堆中)。它的大小由-Xms(最小)和-Xmx(最大)参数设置(最大值和最小值必须小于1G),前者是启动时请求的最小内存,默认值为1/64操作系统物理内存的大小,后者是可应用于JVM的最大内存,默认值为物理内存的1/4。默认情况下,当可用堆内存少于40%时,JVM将把堆内存增加到-Xmx指定的大小,该大小可以通过-XX:MinHeapFreeRation = Ratio指定;当可用堆内存大于70%时,JVM会将堆内存的大小减小到-Xms指定的大小。可以通过XX:MaxHeapFreeRation =指定此比率。当然,为了避免在运行时频繁调整Heap大小,通常-Xms和-Xmx的值设置为相同。堆内存=年轻一代+老年+持久一代。在我们的垃圾回收中,我们经常将堆内存分为年轻一代和老一代(大小比例为1:2),新一代由Eden和Survivor0,Survivor1组成,这三者的比例为8:1: 1,新一代世代的回收机制采用复制算法,在次要GC中,我们都留下了一个生存区域来存储生存对象,实际区域是Eden +生存区域之一,当我们的对象持续时间超过a时一定的年龄(默认为15,可以通过参数设置),对象将放置在旧的一代中,当然大的对象将直接进入旧的一代中,旧一代中使用的回收算法是标签排序算法。 (更详细的内容将在随后的文章GC回收中详细介绍)

2.方法区域(方法区域)

jvm内存模型_jvm的内存模型堆栈_jvm最大内存

方法区域也称为“永久生成”。它用于存储虚拟机加载的类信息,常量和静态变量。它是每个线程共享的内存区域。默认最小值为16MB,最大值为64MB(由于指针扩展,对于64位JVM,默认值为85M)。方法区域的大小可以由-XX:PermSize和-XX:MaxPermSize参数限制。它是一个连续的堆空间。永久代垃圾回收与旧代垃圾捆绑在一起,因此,无论谁已满,它都会触发永久代垃圾回收和旧代垃圾回收。但是,一个明显的问题是,当JVM加载的类信息的容量超过参数-XX:MaxPermSize设置的值时,应用程序将报告OOM错误。该参数由-XX:PermSize和-XX:MaxPermSize

设置

运行时常量池:它是方法区域的一部分。除了类文件中有关类版本,字段,方法和接口的描述信息之外,还有一个常量池用于存储编译。解释器生成的各种符号引用将放置在方法的运行时常量池中。加载类后的区域。

自JDK7起,永久世代已被移除(但尚未移除,并且仍然存在)。永久代中存储的部分数据已转移到Java Heap或Native Heap:符号已转移到Native堆;文字(中间字符串)被传送到Java堆;类静态变量(类静态变量)被传送到Java堆。自JDK8起就使用元空间。元空间的大小受本地内存限制。新参数(MaxMetaspaceSize)用于限制分配给类元数据的本地内存的大小。如果未指定此参数,则将在运行时根据需要动态调整元空间。

有关详细信息,请查看以下文章:(Java 8:从PermGen到元空间)

3.虚拟机堆栈(JVM堆栈)

jvm最大内存_jvm内存模型_jvm的内存模型堆栈

描述Java方法执行的内存模型:执行每个方法时,将创建一个“堆栈框架”来存储诸如局部变量表(包括参数),操作堆栈和方法退出之类的信息。从调用每种方法到执行完成的过程与虚拟机堆栈中从推入到弹出的堆栈帧处理相对应。生命周期与线程相同,并且是线程专有的。堆栈帧由三部分组成:局部变量区,操作数堆栈和帧数据区。局部变量区域组织为一个以字长为单位并从0开始计数的数组。与局部变量区域一样,操作数堆栈也组织为一个以字长为单位的数组。但是与前者不同,它不是通过索引访问的,而是通过堆叠和弹出来访问的,可以将其视为临时数据的存储区域。除了局部变量区域和操作数堆栈之外,java堆栈框架还需要一些数据来支持常量池分析,常规方法返回和异常分配机制。这些数据存储在Java堆栈框架的框架数据区域中。

局部变量表:它存储编译器已知的各种基本数据类型和对象引用(引用指针,而不是对象本身)。 64位长和双精度数据将占用2个局部变量的空间。其余数据类型仅占一种。局部变量表所需的内存空间是在编译期间分配的。输入方法时,将完全确定该方法需要在堆栈帧中分配的局部变量的大小。堆栈框架在运行期间不会更改局部变量表的大小。空间。

4.本机堆栈(本机堆栈)

与虚拟机堆栈基本相似,不同之处在于虚拟机堆栈为虚拟机执行的java方法提供服务,而本地方法栈为Native方法提供服务。 (堆栈的大小比堆小得多)

5.程序计数器(PC寄存器)

是最小的内存区域。它的功能是当前线程执行的字节码的行号指示符。在虚拟机模型中,字节码解释器通过更改此计数器的值来工作。选择下一条要执行的字节码指令。分支,循环,异常处理和线程恢复等基本功能都需要由计数器完成。

jvm内存模型_jvm最大内存_jvm的内存模型堆栈

6.直接存储

直接内存不是虚拟机内存的一部分,也不是Java虚拟机规范中定义的内存区域。在jdk 1. 4中新添加的NIO引入了通道和缓冲区的IO方法。它可以调用Native方法来直接分配堆外内存。堆外内存是本机内存,不会影响堆内存的大小。

参考:

%E5%A0%86%E5%92%8C%E6%A0%88%E7%9C%8B%E8%BF%99%E7%AF%87%E5%B0%B1%E5%A4% 9F.html

%E5%86%85%E5%AD%98%E4%B9%8B%E6%96%B9%E6%B3%95%E5%8C%BA%E5%92%8C%E8%BF% 90%E8%A1%8C%E6%97%B6%E5%B8%B8%E9%87%8F%E6%B1%A0 /

学习无止境,共同进步


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shoujiruanjian/article-353999-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 鱼人吉贝尔
        鱼人吉贝尔

        有你在我们大家都放心呀

      • 游子西
        游子西

        送项目拉动它们的经济

      • 宋戴公
        宋戴公

        分分钟搞垮那什么

      热点图片
      拼命载入中...