初识JVM

作者: 一码平川 | 来源:发表于2021-04-13 18:43 被阅读0次

一.什么是\color{blue}{JVM}

\color{blue}{JVM}\color{blue}{Java Virtual Machine}\color{blue}{Java虚拟机})的缩写,\color{blue}{JVM}是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。\color{blue}{JVM}是运行在操作系统之上的,它与硬件没有直接 的交互。

二.\color{blue}{JVM}内存结构

jvm内存结构

1.方法区(Method Area)又名 永久代(Permanent Generatio)

所有线程共享,它用于存储已被虚拟机加载的\color{blue}{类信息、常量、静态变量、即时编译器编译后的代码等数据}
java8把永久代移除,使用元数据区,这个区域不再\color{blue}{JVM}内存中,改由本地内存。

2.堆(Heap)

所有线程共享,它用于存放所有的\color{blue}{实例对象}

3.java栈(java Stacks)

线程独享,它用来描述java方法执行的内存模型:每个方法被执行时,会创造一个\color{blue}{栈帧}\color{blue}{Stack Frame}),用来存放\color{blue}{局部变量表、操作栈、动态链接、方法出口等信息}。每一个方法被调用直至执行完成的过程,就对应着一个\color{blue}{栈帧}在虚拟机栈中从入栈到出栈的过程。

4.本地方法栈(Native Method Stacks)

线程独享,它的作用和java栈类似。不同的是,它是用来描述\color{blue}{Native Method}。即非java方法,一般为操作系统本地方法。

5.程序计数器(Program Counter Register)

线程独享,是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的行号指示器。

三.内存分配和回收

1.内存分配:

a.\color{blue}{类信息、常量、静态变量}存储在\color{blue}{方法区}\color{blue}{永久代}

\color{blue}{HotSpot VM}会把这一部分作为\color{blue}{MinorGC}的对象,即不使用 \color{blue}{HotSpot VM}虚拟机时,这部分没有回收机制。使用\color{blue}{HotSpot VM}虚拟机时,在进行\color{blue}{MinorGC}( 标记整理算法 |Mark-Compact算法)时,也会把无用的类和静态变量释放。
\color{blue}{java8}把永久代移除,使用\color{blue}{元数据区},把\color{blue}{永久代}的信息存储在本地内存中,此时,这部分的空间受总内存大小影响,不再有回收机制。

b.实例对象存放在堆区域。

堆又分为\color{blue}{新生代}\color{blue}{Eden}8/10、\color{blue}{ServivorFrom}1/10、\color{blue}{ServivorTo}1/10)和老年代。实例对象优先放到\color{blue}{Eden},大对象(指需要连续存储空间的对象)直接放到\color{blue}{老年代}。当\color{blue}{Eden}空间不足时,会进行\color{blue}{MinorGC}(复制算法 |Copying算法),部分对象会释放,部分会进入\color{blue}{老年代},其余的会进入\color{blue}{ServivorTo}\color{blue}{ServivorFrom}是在进行\color{blue}{MinorGC}时使用的空间。当大对象进入\color{blue}{老年代}或者\color{blue}{MinorGC}有对象进入\color{blue}{老年代}\color{blue}{老年代}空间不足时,会进行\color{blue}{MajorGC}( 标记整理算法 |Mark-Compact算法),\color{blue}{老年代}部分对象被释放,空间重新被整理,使空间可以更好的被利用。

相关文章

  • 深入JVM内核 目录

    深入JVM内核 目录 深入JVM内核1 初识JVM深入JVM内核2 JVM运行机制深入JVM内核3 常用JVM配置...

  • 初识JVM

    Java 程序的执行过程 一个 Java 程序,首先经过 javac 编译成 .class 文件,然后 JVM 将...

  • JVM 初识

    Java 虚拟机简介 Java 号称 「一次编译,到处运行」的主要源于 JVM (Java Virtual Mac...

  • 初识JVM

    为猿不识JVM,侃称大神也枉然。 最近利用晚上时间学习了JVM相关知识,还未真正深入。以脑图形式记录了部分知识点,...

  • JVM初识

    今天对JVM进行了简单的学习,做了一个总结,如果有不对的地方还请大家指正。 一.java代码如何运行 编译型语言:...

  • jvm初识

    jvm内存模型介绍 Java语言优势巨大,一处编译随处运行,这个全依赖于jvm 自从内存管理机制之下,不再需要为没...

  • JVM初识

    一、JVM的基本介绍 JVM(Java Virtual Machine)又被分为三大子系统,类加载子系统,运行时数...

  • 初识JVM

    一.什么是 是()的缩写,是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计...

  • 初识JVM

    对于从事C、C++程序开发的人员来说,他们既拥有每一个对象的“所有权”,又担负着每一个对象生命开始到终结的维护责任...

  • chapter-1 初识JVM

    本章知识点 1.JVM的概念2.JVM发展历史3.JVM种类4.Java语言规范5.JVM规范 初识JVM - J...

网友评论

      本文标题:初识JVM

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