简单了解JVM模型

91 阅读2分钟

JVM内存模型

前言

java语言最大的优势之一就是跨平台性,我们写完代码,无论是在windows系统还是linux系统都可以完美的运行码,但是我们并没有针对某一种平台做出特殊的处理,这是因为JVM帮我们去处理这些事情了,所以我们才可以在不同的操作系统上面去运行同一份代码。

什么是JVM

JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。

未命名文件 (7).png

JVM整体架构

未命名文件 (9).png

  • :主要存放实例对象,很多垃圾收集器(回收堆中垃圾的工具)将堆分为了新生代(Eden区、Suvivor区)、老年代,当Eden区积满,会触发一次minor gc操作,将还需要用的对象转移到s0区,s0积满转移到s1区,当老年代积满,会触发一次full gc操作回收新生代、老年代的垃圾。full gc的效率要比minor gc低很多,因此我们jvm调优尽可能要减少full gc操作。

未命名文件 (10).png

  • :每个线程都持有一片栈空间,主要用于存放局部变量、操作数等。

未命名文件 (11).png

  • 本地方法栈:本地方法是用c++写的,而用java去调用,也需要一定的内存空间。
  • 方法区:存放常量、静态变量和一些类信息,如果方法去中的静态变量是对象,那么堆中存在对象,方法区是指向它的内存地址。方法区中的类信息是c++结构,类似struct,也是真正用到的类,而堆中是java的类供开发人员去用,他们之间有一个指针,为类型指针。
  • 程序计数器:记录程序执行的位置,便于中断返回继续执行下面的代码。