其他分享
首页 > 其他分享> > JMM

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