一流程序员与二流程序员的分水岭:JVM虚拟机-全面理解
秉承一个信念,要学遍学底层逻辑。那是一通百通的底气。
一、学不学JVM 是自主解决问题的一流程序员与跟着别人做CRUD的二流程序员的分水岭。只有深入了解透彻jvm的工作过程及原理,才能对自己开发出高性能的代码充满信心。

1首先就是将classFile文件通过类加载(ClassLoader也就是个类)加载到jvm虚拟机的内存中。就是将类加载到就是方法区(元数据区)
2然后交给执行引擎,将类中指令解析出来执行,执行过程中会将类创建对象。
3再将对象创建到堆当中。
那要执行某个东西需要一个逻辑就是线程。因为只有线程是执行程序的唯一单元。在jvm内部,会对每一个线程分配一个虚拟机栈(左数第2列),它是一个先进后出的栈结构。在这个栈里面会记录当前线程运行的所需要的数据。
每一个线程中都有一个 程序计数器:记录当前线程运行到哪一步了。
执行引擎:具体执行过程中,后很多执行方式,包括:解释执行、编译执行。编译执行又分为C1和C2(默认)两种。
堆和方法区 是所有的线程共享的内存区域。

假设有一个web7*24小时运行,当堆里eden区对象放满的时候,会触发垃圾收集gc(minor gc ):就是把无用的对象回收一下。找到非垃圾对象,放到survior区,剩下的干掉。如果一个对象经历过一次gc之后,分代年龄会加1.当分代年龄加到15,会被挪到老年代。
JVM的主要目的就是减少full gc,或者是减少full gc 的时间。因为在full gc的时候收集堆的时间比较长,所以它STW的时间相对也比较长。当然也要减少minor gc的次数。
二、Class 文件规范
1、Class文件结构

Spring6及springboot3已经用到jdk17了,但是我们jdk8 是跑不起来spring6的。


可以看到jvm的字节码,以及整个的执行过程:
![]()
![]()


本文原创,转载必追究版权。
