栈存储什么
八种数据类型,对象的引用变量,实例方法
栈帧(方法中)中主要保存3类数据:
本地变量(Local Variables) :输入参数和输出参数以及方法内的变量
栈操作(Operand Stack) |: 记录出栈、入栈的操作;
栈帧数据(Frame Data) :包括类文件、方法等等(八种基本类型的变量,对象的引用,实例方法)
栈出现的错误(Error级别的错误):栈内存溢出异常(SOF):Exception in thread "main" java.lang.StackOverflowError
堆+栈+方法区交互的关系
栈中存储:八种基本数据类型(byte,short,int ,long ,float,double ,bloon,char,boolean)+对象的引用(reference)+实例方法 (对象的引用指向堆)
堆(Heap)
新生代(NEW)
老年代(OLD)
元空间
永久代
是什么
新生区,养老区,元空间
新生区:
伊甸区
幸存者0区(S0)别名:from
幸存者1区(S1)别名: to
堆参数调优
JDk7
jdk8 (OOM :对内存溢出)
堆逻辑上分为:新生区,养老区,元空间
物理上分为:新生区,养老区
配置参数演示和堆的内存证明:
模拟栈内存溢出错误
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"); } }
GC日志信息分析
GC日志详情
Full GC日志详情
[Full GC (Allocation Failure)
[PSYoungGen: 0K->0K(2048K)]
[ParOldGen: 4207K->4187K(7168K)] 4207K->4187K(9216K),
[Metaspace: 3227K->3227K(1056768K)], 0.0063580 secs] [Times: user=0.02 sys=0.00, real=0.01 secs]
原文:https://www.cnblogs.com/zzhAylm/p/14853852.html