这是第一篇博客,从此踏入程序员的“不归路”-
什么是JVM
JVM 是 Java 的核心和基础,在 Java 编译器和 os 平台之间的虚拟处理器。它是一种基于下层的操作系统和硬件平台并利用软件方法来实现的抽象的计算机,可以在上面执行 Java 的字节码程序。
简单的说,JVM 是java程序运行的平台。
java编译执行的流程的三个步骤及其功能:
- java源码编译机制
》》将java源码编译成JVM可以理解的字节码 - 类加载机制
》》类加载器加载其实就是根据编译后的Class文件,将java字节码载入JVM内存,并完成对运行数据处于的初始化工作,供执行引擎执行。查询是否已加载是自底向上的,类的加载过程是自顶向下的。 - 类执行机制
》》将载入JVM内存的字节码转化为机器可以识别的机器码,这个过程可以由解释器来执行,也可以有即时编译器来执行。
类加载机制(内存相关)
想要知道类加载做了什么,需要了解java内存的分配。
java内存区域及内存溢出
内存区域
Java 虚拟机在执行 Java 程序的过程中会把他所管理的内存划分为若干个不同的数据区域。Java 虚拟机规范将 JVM 所管理的内存分为以下几个运行时数据区:程序计数器、Java 虚拟机栈、本地方法栈、Java 堆、方法区、运行常量池。前面3各区域(PC寄存器、Java栈、本地方法栈)是每个线程独自拥有的,后三者则是整个JVM实例中的所有线程共有的。
》PC计数器:
每个线程都拥有一个,线程启动时创建,这个计数器存放当前正在被执行的字节码指令(JVM指令)的地址。
》JVM栈:
JVM栈也是每个线程单独拥有&#