Java虚拟机——JVM

in 编程
关注公众号【好便宜】( ID:haopianyi222 ),领红包啦~
阿里云,国内最大的云服务商,注册就送数千元优惠券:https://t.cn/AiQe5A0g
腾讯云,良心云,价格优惠: https://t.cn/AieHwwKl
搬瓦工,CN2 GIA 优质线路,搭梯子、海外建站推荐: https://t.cn/AieHwfX9

基本概念

    JVM 是可运行 Java 代码的假想计算机 ,包括方法区、堆(Heap)、栈(Stack)、 PC寄存器和 本地方法栈。JVM 是运行在操作系统之上的,它与硬件没有直接 的交互。

方法区:不止是存“方法”,而是存储整个 class文件的信息,JVM运行时,类加载器子系统将会提取 class文件里面的类信息,并将其存放在方法区中。例如类的名称、类的类型(枚举、类、接口)、字段、方法等等。

堆(Heap):对于Java而言,每个应用都唯一对应一个JVM实例,而每一个JVM实例唯一对应一个堆。堆主要包括关键字 new的对象实例、 this指针,或者数组都放在堆中,并由应用所有的线程共享。堆一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收:名为垃圾回收—— GC(garbage collection)。

栈(Stack):栈由操作系统自动分配释放 ,用于存放函数的参数值、局部变量等,其操作方式类似于数据结构中的栈。JVM会对Java栈执行两种操作:压栈和出栈。这两种操作在执行时都是以栈帧为单位的。

PC寄存器:pc寄存器用于存放一条指令的地址,每一个线程都有一个PC寄存器。

本地方法栈:用来调用其余语言的本地方法,例如 C/C++写的本地代码, 这些方法在本地方法栈中执行,而不会在Java栈中执行。

堆和栈的区别

  1. 管理方式不同。栈是由系统自动分配释放;堆的申请和释放工作由程序员控制,容易产生内存溢出
  2. 空间大小不同。每个进程拥有的栈的大小要远远小于堆的大小。
  3. 分配方式不同。堆都是动态分配的,没有静态分配的堆。栈有2种分配方式:静态分配和动态分配。
  4. 存放内容不同。栈存放的内容,函数返回地址、相关参数、局部变量和寄存器内容等。堆主要包括关键字 new的对象实例、 this指针,或者者数组等。

JVM运行时内存

    Java 堆从 GC 的角度还可以细分为: 新生代
(
Eden 区

From Survivor 区

To Survivor 区
)和
老年
代。

    我们创建对象时,先往Eden和From中放。如果满了,就会发生minoGC,此时会清空 Eden和From,如果还有对象 那么就往To中放,如果To中放不下就直接往老年代中放,如果To能放下,就放在s2中,如果s2也满了,会发生小型的minoGC 将对象清空,如果还有数据 将数据+1,直到加到15就会放入到老年代中,但是 老年代中的对象 都是常用的对象  比如数据库连接池等。老年代如果满了就会发生full GC,如果清空后 还不够用 就会抛出OOM异常。

垃圾回收(GC)

如何确定垃圾

  1. 引用计数法一个对象如果没有任何与之关联的引用,即他们的引用计数都不为 0,则说明对象不太可能再被用到,那么这个对象就是可回收对象。
  2. 可达性分析:通过一系列的“GC roots”对象作为起点搜索。如果在“GC roots”和一个对象之间没有可达路径,则称该对象是不可达的不可达对象变为可回收对象至少要经过两次标记过程。两次标记后仍然是可回收对象,则将面临回收

JVM类加载机制

JVM 类加载机制分为五个部分:加载,验证,准备,解析,初始化,下面我们就分别来看一下这五个过程

  1. 加载:这个阶段会在内存中生成一个代表这个类的 java.lang.Class 对象作为方法区这个类的各种数据的入口。
  2. 验证:确保 Class 文件的字节流中包含的信息是否符合当前虚拟机的要求,并
    且不会危害虚拟机自身的安全。
  3. 准备:在方法区中分配这些变量所使用的内存空间
  4. 解析:虚拟机将常量池中的符号引用替换为直接引用的过程
  5. 初始化:初始化阶段是类加载最后一个阶段,前面的类加载阶段之后,除了在加载阶段可以自定义类加载器以外,其它操作都由 JVM 主导。到了初始阶段,才开始真正执行类中定义的 Java 程序代码。

 

 

 

 

 

关注公众号【好便宜】( ID:haopianyi222 ),领红包啦~
阿里云,国内最大的云服务商,注册就送数千元优惠券:https://t.cn/AiQe5A0g
腾讯云,良心云,价格优惠: https://t.cn/AieHwwKl
搬瓦工,CN2 GIA 优质线路,搭梯子、海外建站推荐: https://t.cn/AieHwfX9
扫一扫关注公众号添加购物返利助手,领红包
Comments are closed.

推荐使用阿里云服务器

超多优惠券

服务器最低一折,一年不到100!

朕已阅去看看