JMM
作者:互联网
执行引擎
CodeCache 相对于其他内存(可读可写,可执行)
操作系统内存模型和JVM内存模型之间的关系;
操作系统内存模型
堆区
JVM内存模型,其实就是从堆区切了一块大内存下来(内存池)
堆区
方法区(jdk7)
虚拟机栈
本地方法栈
程序计数器
方法区(jdk8)
-----------------------
栈
全局区
代码块
IDEA点执行main函数:先javac编译,在java执行
JVM启动
JVM初始化
HSDB 窥探JVM内部 (类比HSDIS)
oop-klass模型
klass模型:Java的类在JVM中的存在形式
因为openJDK是用汇编、c、c++写的,JVM不认识java类的,需要 Java类->C++类,在JVM内部流通
类加载器
七个阶段:
类何时被加载,何时被解析
初始化到底是什么
三个类加载器
双亲委派
SPI
自定义类加载器
字节码文件(.class)加载入JVM中是如何存储的?
字节流:ClassFileStream* cfs = stream();
基于《Java虚拟机规范》对这个stream进行解析
1、InstanceKlass存储java类的元信息(方法区,不是Class对象)
2、InstanceMirrorKlass镜像类(堆区,Class对象)
静态属性,在堆区
方法区:Java虚拟机规范(接口)
永久代
元空间:方法区在JVM中的具体实现(接口实现类)
1、永久代:jdk7以前方法区的具体实现,JVM内存模型的堆区(不是操作系统的堆区)
2、元空间:jdk8及以后方法区的具体实现,在操作系统的堆区
大小是多少:MetaspaceSize MaxMetespaceSize
java -XX:PrintFlagFinal -version | grep Metaspace
2.1、JVM调优参数三种类型:
-XX:key=val
-XX:+/-param
-Xmx -Xms 调优堆的 (eg:-Xmx10m -Xms10m 设置10m)
OOM
eg:模拟元空间OOM的程序: 利用CGLib库,
如何调优:
-XX:MetaspaceSize=20m
-XX:MaxMetespaceSize=20m
元空间的调优规则
VisualVM是如何监控其他Java程序吗? java agent(java调试器的底层实现原理)
标签:Java,堆区,XX,内存,JVM,JMM,java 来源: https://www.cnblogs.com/farewells/p/16247653.html