Java--JVM--栈(stack)和堆(heap)

  1. java 栈(java stack):
    1. 解释:
      • 栈管运行,堆管存储
      • 程序=算法+数据结构
      • 程序=框架+业务逻辑
      • 队列(FIFO)
      • 栈(FILO) 
      •  java 方法 = 栈 帧,在java中叫main 方法,进入栈中叫 栈帧
    2. 栈是什么
    3. 栈存储什么

      1. 八种数据类型,对象的引用变量(开辟的栈帧是方法的一次执行过程) ,指向方法的引用

      2. 栈帧(方法中)中主要保存3类数据:

        • 本地变量(Local Variables) :输入参数和输出参数以及方法内的变量

        • 栈操作(Operand Stack) : 记录出栈、入栈的操作;

        • 栈帧数据(Frame Data) :包括类文件、方法等等(八种基本类型的变量,对象的引用,方法的引用)

      3. 局部变量,实例方法,对象的引用
    4. 栈的运行原理
    5. 栈出现的错误(Error级别的错误):栈内存溢出异常(SOF):Exception in thread "main" java.lang.StackOverflowError 

  2. 堆+栈+方法区交互的关系

    1. 栈中存储:八种基本数据类型(byte,short,int ,long ,float,double ,bloon,char,boolean)+对象的引用(reference)+指向方法的引用 (对象的引用指向堆) 

    2. 堆中保存了: 对象的实例 (指向方法区中的对象结构信息)+实例变量
    3. 方法区中保存了:类的结构信息(类的模板),静态 方法和变量,常量
    4. JDK的名字=HostSpot
  3. 堆(Heap)

    1. 分类
      • 新生代(NEW)

        1. 伊甸区
        2. 幸存者0区
        3. 幸存者1区  
      • 老年代(OLD)

      • 元空间

      • 永久代 

      • java 8 逻辑上分为:新生区,养老区,元空间
      • java 8 物理上分为:新生区,养老区
      • java 7逻辑上分为: 新生区,养老区,永久存储区
      • java 7 物理上分为:新生区,养老区
    2. 是什么

    3. 新生区,养老区,元空间

      1. 新生区:

        1. 伊甸区

        2. 幸存者0区(S0)别名:from

        3. 幸存者1区(S1)别名:  to  

  4.  堆参数调优

    1. JDk7

      1.       

    2. jdk8 (OOM :对内存溢出)

    3. JVM调优简介
      1.  堆逻辑上分为:新生区,养老区,元空间

      2.  物理上分为:新生区,养老区

    4. 配置参数演示和堆的内存证明: 

      1. 从对空间内存=新生区内存+养老区内存 ,可以看出物理上堆没有包括元空间,且配置的参数生效
    5. 模拟栈内存溢出错误

      1. package com.model.jvm;
        
        public class Test03 {
            public static void main(String[] args) {
        //        Runtime.getRuntime(): -> JVM运行时数据区的对象
                System.out.println(Runtime.getRuntime().availableProcessors());
                Long maxMemory=Runtime.getRuntime().maxMemory();  //返回java虚拟机的试图使用的最大内存量
                Long totalMemory=Runtime.getRuntime().totalMemory(); //放回虚拟机的总内存量
                System.out.println("-Xmx:MAX_MEMORY="+maxMemory+"(字节);"+(maxMemory/(double)1024/1024)+"MB");
                System.out.println("-Xms:TOTAL_MEMORY="+totalMemory+"(字节);"+(totalMemory/(double)1024/1024)+"MB");
        
            }
        }
    6. GC日志信息分析

      1.  GC日志详情

        1. [GC (Allocation Failure) [PSYoungGen: 1973K->480K(2560K)] 1973K->771K(9728K), 0.0418826 secs] [Times: user=0.00 sys=0.00, real=0.06 secs] 
      2. Full GC日志详情

        1. [Full GC (Allocation Failure)

        2. [PSYoungGen: 0K->0K(2048K)]

        3. [ParOldGen: 4207K->4187K(7168K)] 4207K->4187K(9216K),

        4. [Metaspace: 3227K->3227K(1056768K)], 0.0063580 secs] [Times: user=0.02 sys=0.00, real=0.01 secs]

        5.  
posted @ 2021-06-05 20:58  张紫韩  阅读(93)  评论(0编辑  收藏  举报