JVM体系结构

JVM是建立在操作系统之上的 JVM的组成? 栈、堆、方法区、本地方发栈、程序计数器、执行引擎

堆中是怎么分区的?

  • 新生代:伊甸园区(eden)和幸存区(from、to区)
  • 老年代
  • 永久代(元空间) 伊甸园区:from:to=8:1:1 新生代和老年代的内存大小比例默认设置为1:2

垃圾回收:主要发生在JVM的堆中 垃圾回收算法:

  • 引用计数
  • 复制(多用在幸存区,即from、to区)
  • 标记清除
  • 标记压缩 总结 要合理垃圾回收需要分代收集,即不同的区使用不同的垃圾回收算法

类加载器:

  • bootstrap(引导类加载器) 引导类加载器属于JVM的一部分,由C++代码实现。 引导类加载器负责加载<JAVA_HOME>\jre\lib路径下的核心类库,由于安全考虑只加载 包名 java、javax、sun开头的类。
  • extclassloader(扩展类加载器) 全类名:sum.misc.Launch$ExtClassLoader,Java语言实现。 扩展类加载器的父加载器是Bootstrap启动类加载器 (注:不是继承关系) 扩展类加载器负责加载<JAVA_HOME>\jre\lib\ext目录下的类库。
  • appclassloader(应用类加载器) 全类名: sun.misc.Launcher$AppClassLoader 系统类加载器的父加载器是ExtClassLoader扩展类加载器(注: 不是继承关系)。 系统类加载器负责加载 classpath环境变量所指定的类库,是用户自定义类的默认类加载器。

JMM

什么是JMM? 是一种协议,用来保证缓存一致性的一种协议 JVM的用途? JVM该怎么学习