河南网站开发培训价格,导航网站怎么推广,贵州做团队培训的网站,网页的视频怎么下载到本地一、JVM简介
JVM (Java虚拟机) 是执行Java字节码的虚拟机。它是Java平台的核心#xff0c;并且为Java代码提供了跨平台的能力。JVM 是一种虚拟的计算机#xff0c;在其上运行的程序是Java字节码#xff0c;它提供了Java代码在不同操作系统和硬件平台上执行的能力。JVM 将Ja…一、JVM简介
JVM (Java虚拟机) 是执行Java字节码的虚拟机。它是Java平台的核心并且为Java代码提供了跨平台的能力。JVM 是一种虚拟的计算机在其上运行的程序是Java字节码它提供了Java代码在不同操作系统和硬件平台上执行的能力。JVM 将Java字节码解释成机器语言。
二、内存区域划分
JVM本质是就是一个Java进程会从操作系统申请一大块内存给Java代码使用这块内存进一步划分
其中最核心的就是三个区域 1堆——new出来的对象成员变量 2栈——维护方法之间的调用关系局部变量 3方法区/元数据区——放类加载后的类对象静态变量
具体又分成下面五部分 注意 1虚拟机栈是给Java代码使用的本地方法栈是给JVM的本地方法使用的 2堆和元数据区在一个JVM进程中只有一份栈和计数器则存在多份每个线程都有一份 3程序计数器记录当前程序执行到哪个指令了用long类型存储了一个内存地址这个内存地址就是下个要执行的字节码的地址
三、类加载
3.1 什么是类加载
把.class文件加载到内存得到类对象的过程就叫类加载
3.2 类加载的过程 1加载
找到.class文件双亲委派模型并读取文件内容
2验证
验证是连接阶段的第一步这一阶段的目的是确保Class文件的字节流中包含的信息符合《Java虚拟机规范》的全部约束要求保证这些信 息被当作代码运行后不会危害虚拟机自身的安全。
3准备
给类对象分配内存空间未初始化的类对象包括静态变量的内存空间都是0
4解析
Java 虚拟机将常量池内的符号引用替换为直接引用的过程也就是初始化常量的过程。
5初始化
初始化阶段Java 虚拟机真正开始执行类中编写的 Java 程序代码将主导权移交给应用程序。初始化阶段就是执行类构造器方法的过程。
3.3 加载过程中的“ 双亲委派模型 ”
首先明确类加载的过程是由JVM中内置的类加载器完成的。
在JVM中内置了三个类加载器 1Bootstrap ClassLoader负责加载Java标准库中的类 2Extension ClassLoader负责加载一些非标准但是扩展的库的类 3Application ClassLoader负责加载项目中自己写的类以及第三方库中的类
且上述类加载器存在如下关系 1是2的父亲类加载器2是3的父亲类加载器
3.4 非必要不加载
不是JVM一启动就把所有的.class文件都加载了只有“必要”时加载
“必要” 1创建了这个类的实例 2使用了这个类的静态方法\静态属性 3使用子类会触发父类的加载
四、垃圾回收
4.1 什么是垃圾回收
垃圾回收称为GCGarbage Collection是一种帮助程序猿自动释放内存的技术
4.2 释放的区域
在JVM中垃圾回收所释放的空间是堆栈和程序计数器都是随着线程一起销毁而元数据区存储的是类对象很少会卸载
4.3 GC的两个阶段
1找垃圾 2释放垃圾
4.4 找垃圾 1引用计数
Test t new Test();
Test t2 t;两个缺陷 1浪费内存空间 2存在循环引用的情况
循环引用
2可达性分析JVM 4.5 释放垃圾
1标记清除 2复制清除 3标记整理 4分代回收JVM