jvm内存笔记

目录

一:non-heap

二:heap


美图说个**,先上图:

jvm内存笔记

如上图所示嘛:

 首先嘛JVM内存区分为堆heap(上图白色区域)、非堆non-heap(上图蓝色区域)。

堆和非堆。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给 自己用的,

  • 一:non-heap

  1. 非堆中的方法区 Method Area (也称永久带)是用来存放类信息、常量、静态变量的。这个内存区可以用上图中橘黄色的参数进行配置;方法区中有一个常量池:用于存放各种符号引用;
  2. 虚拟机栈用于存放局部变量表(基本数据类型、对象引用等)、操作栈、方法出口;
  3. 本地方法栈与虚拟机栈基本类似,区别在于虚拟机栈为虚拟机执行的java方法服务,而本地方法栈则是为Native方法服务;
  4. 程序计数器用来记录程序下一条指令。

  • 二:heap

1:堆内存用来存放对象实例和数组(所有new对象),这里可以通过上面的橘黄色的参数配置大小;

2:堆内存分为两部分:

      a:年轻代Young;年轻代是用来存放刚创建的对象,可以使用上图中的橘黄色参数配置大小;

      b:老年代Old;老年代是用来存放大对象或者已经存活了很久的对象;

3:其中年轻代又分为三部分:

      a:Eden;

      b:From Survivor;

      c:To Survivor;

主要使用复制清除算法,在Eden内存块和其中一个Survivor把需要保存的数据移到另一个Survivor,下次继续反复,直到15次之后便更新到老年代中,执行一次GC,命名为 Minor GC。其中老年代称为Full GC。

 

参考链接:Java虚拟机的内存组成以及堆内存介绍

                  Xms Xmx PermSize MaxPermSize 区别

                  Java JVM 8-java堆新生代,老年代的划分及回收算法

                  Java 新生代、老年代、持久代、元空间