了解java虚拟机(JVM)

java虚拟机的基本概念

虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java虚拟机屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。在这里插入图片描述

主要特点

Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用模式Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。

Java运行时数据区域(JVM Runtime Data Areas)

在这里插入图片描述方法区(Method Area):
同Java 堆,是各个线程共享的内存区域,用于存储虚拟机已经加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。

堆:
通过new等指令创建,不需要程序代码显式释放,比如我们new的对象。

优点:可动态分配内存大小,生存周期不必事先告诉编译器,Java垃圾回收自动回收不需要的数据。

缺点:运行时需动态分配内存,数据存取速度较慢。

Java虚拟机栈:
线程私有,用于存储栈帧,栈帧的入栈出栈过程即方法调用到执行结束的过程。栈帧中主要存放方法执行所需的局部变量表(包括局部变量的声明数据类型、对象引用等)、操作数栈、方法出口等信息。

本地方法栈:
跟java虚拟机栈类似,本地方法栈是为本地方法服务的。

Java虚拟机的垃圾回收机制

垃圾回收几个步骤

  1. 怎么判定一个垃圾
    根据根搜索算法
  2. 怎么清理垃圾 标记—清除法,存在内存碎片,内存利用率不高。 分段复制法,大量的对象移动,导致JVM卡顿。 标记—整理算法,碎片少,上两种的折中方案。 分代收集算法,现在就是用的这种方法