网络广告营销的实现方式,惠州做网站优化,wordpress自定义后台单页模板,服装设计学什么1.一个程序在 JVM 中运行的完整流程java程序执行流程.JPG说明#xff1a;① 类加载器把字节码加载到方法区② 方法区的字节码被 JVM new#xff0c;在堆内存中生成字节码对象③ 字节码对象被 GC 的要求有#xff1a;该类没有在其他任何地方被引用#xff1b;该类的所有的实…1.一个程序在 JVM 中运行的完整流程java程序执行流程.JPG说明① 类加载器把字节码加载到方法区② 方法区的字节码被 JVM new在堆内存中生成字节码对象③ 字节码对象被 GC 的要求有该类没有在其他任何地方被引用该类的所有的实例对象都已被 GC该类的类加载器的实例已被 GC2.Java 虚拟机的生命周期JVM 的生命周期可以分为启动、运行、退出。(1) 启动JVM 的启动过程是类加载通过类加载器把二进制字节码加载到 JVM。类加载器采用双亲委派模型 其类型有 3 种① Bootstrap ClassLoader 启动类加载器负责加载系统类和 /lib 目录的 jar 和类例如 String② ExtClassLoader 扩展类加载器负责加载 /lib/ext 目录下的 jar 和类③ AppClassLoader 应用程序类加载器负责加载当前应用 ClassPath 的 jar 和类④ UserDefinedClassLoader 用户自定义加载器负责加载用户自定义的 jar 和类示例如下执行 main 方法需要加载 Test01。根据双亲委派模型即向上检查、向下加载JVM 从 AppClassLoader、ExtClassLoader 到 Bootstrap ClassLoader 检查和加载 Test01。Test01 是用户自定义类Test01 没有指定父类即默认父类是 Object 类被AppClassLoader 加载。public class Test01 {public static void main(String[] args) {System.out.println(123);}}类的生命周期① 加载通过全类名获取该类的二进制字节流、将字节流所代表的静态存储结构转换为方法区的运行时数据结构、在内存中生成一个代表该类的 Class 对象(方法区数据的访问入口)② 验证验证文件格式、字节码验证、魔数验证③ 准备分配内存给类变量并设置类变量初始值。如果是基本数据类型就会给他们设置默认值④ 解析将常量池内的符号引用替换为直接引用⑤ 初始化new 指令、getstatic 指令、putstatic 指令、invokestatic 指令、 java.lang.reflect 的反射等⑥ 使用用户程序使用⑦ 卸载该类的所有的实例对象都已被GC、该类没有在其他任何地方被引用、该类的类加载器的实例已被GC(2) 运行一个JVM 进程的运行实际上是 Java 程序的运行。当程序运行结束后JVM 进程也就结束。JVM 的守护线程Java 有 2 种进程User Thread 用户线程、Daemon Thread 守护线程。例如用户线程是指用户自定义的 main 函数而守护线程是服务于用户线程的例如 GC 垃圾回收线程。两种线程的生命周期是一致的前者优先级高于后者的。(3)退出JVM 的退出有多种场景如下所示。① 程序正常结束运行② 程序中调用 System.exit() 等方法③ 程序运行过程中遇到异常错误终止④ 操作系统、硬件原因导致 JVM 进程被结束