1.JVM的位置
Java程序运行在JVM虚拟机上
JRE包含JVM,它运行在操作系统上,操作系统运行在计算机硬件上
2.JVM体系结构
.java文件->通过javac命令,编译成class文件->类在加载的时候使用类加载器(classloader)
->加载到JVM里面,classloader在运行时数据区中加载
运行时数据区包括:方法区,堆,java栈,本地方法栈,程序计数器
->与执行引擎和本地方法接口互动
综上:JVM由类加载器,运行时数据区,执行引擎和本地方法接口构成
3.类加载器
概念:
(1)类的加载:是指将类的class文件读入到内存,并为之创建一个java.lang.Class对象
(2)java类加载器:是java的运行环境JRE(包括java虚拟机和基础类库)的一部分,负责将java类加载到虚拟机中。
作用:负责加载class文件(class文件就是二进制文件),Java程序在运行的时候,JVM通过类加载机制(ClassLoader)把class文件加载到内存中,只有class文件被载入内存,才能被其他class引用,使程序正确运行起来.,至于它是否可以运行,则由执行引擎(Execution Engine)决定。
种类:
1 虚拟机自带的加载器
- ①引导类加载器(Bootstrap):负责加载最基础的文件
- ②扩展类加载器(Extensions):加载基础文件
- ③应用类加载器(AppClassLoader):加载第三方jar包和自己编写的java文件
2 用户自定义加载器
Java.lang.ClassLoader的子类,用户可以定制类的加载方式,即如果你的程序有特殊的需求,你也可以自定义你的类加载器的加载方式 ,进入ClassLoader的源码,其为抽象类,因此在你定制化开发的时候,需要你定义自己的加载器类来继承ClassLoader抽象类即可,即 MyClassLoader extends ClassLoader
4.运行时数据区(5个)
1.java栈内存:存储着的是StackFrame,StackFrame包含三类信息:局部变量,执行环境,操作数栈。
2.Java堆:是用来存放对象信息的,负责存储所有对象实例和数组的
3.程序计数寄存器:是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的行号指示器。
4.方法区域:存放了所加载的类的信息(名称、修饰符等)、类中的静态变量、类中定义为final类型的常量、类中的Field信息、类中的方法信息等
5.本地方法堆栈:JVM采用本地方法堆栈来支持native方法的执行,此区域用于存储每个native方法调用的状态。
5.JVM的垃圾回收机制(GC)
- 定义:垃圾回收(Garbage Collection)是Java虚拟机(JVM)垃圾回收器提供的一种用于在空闲时间不定时回收无任何对象引用的对象占据的内存空间的一种机制。
- 回收时间:
①会在cpu空闲的时候自动进行回收
②在堆内存存储满了之后
③主动调用System.gc()后尝试进行回收