Categories
程式開發

十个问题弄清JVM&GC(二)


每个java开发同学不管是日常工作中还是面试里,都会遇到JDK、JVM和GC的问题。本文会从以下10个问题为切入点,带着大家一起全面了解一下JVM的方方面面。

  • JVM、JRE和JDK的区别和联系
  • JVM是什么?以及它的主要作用
  • JVM的核心功能有哪些
  • 类加载机制和过程
  • 运行时数据区的逻辑结构
  • JVM的内存模型
  • 如何确定对象是垃圾
  • 垃圾收集的算法有哪些
  • 各种问世的垃圾收集器
  • JVM调优的参数配置

上一篇文章结尾时我们谈到,就JVM的设计规范,从使用用途角度JVM的内存大体的分为:线程私有内存区 和 线程共享内存区。

十个问题弄清JVM&GC(二) 1

线程私有内存区在类加载器编译某个class文件时就确定了执行时需要的“程序计数器”和“虚拟栈帧”等所需的空间,并且会伴随着当前执行线程的产生而产生,执行线程的消亡而消亡,因此“线程私有内存区”并不需要考虑内存管理和垃圾回收的问题。线程共享内存区在虚拟机启动时创建,被所有线程共享,是Java虚拟机所管理内存中最应该关注的和最大的一块。首先我们来一起看一下“线程共享内存区”的内存模型是什么样的?

6、JVM的内存模型

十个问题弄清JVM&GC(二) 2

如图所示,JVM的内存结构分为堆和非堆两大块区域。

  • 其中“非堆”就是上篇文章我们提到的方法区或叫元数据区,用来存储class类信息的。
  • 而“堆”是用来存储JVM各线程执行期间所创建的实例对象或数组的。堆区分为两大块,一个是Old区,一个是Young区。Young区分为两大块,一个是Survivor区(S0+S1),一块是Eden区S0和S1一样大,也可以叫From和To。

原文链接:【https://www.infoq.cn/article/KJU2k2GclEdXqxIkFFfh】。未经作者许可,禁止转载。