JVM虚拟机

一、JVM虚拟机的原理

所谓虚拟机,就是一台虚拟的机器,他是一款软件,用来执行一系列虚拟计算指令,大体上虚拟机可分为系统虚拟机和程序虚拟机,他们完全是对物理的计算的仿真,提供一个可以运行完整操作系统的软件平台。

程序虚拟机典型代码就是Java虚拟机,他专门为执行单个计算程序而计算,在Java虚拟机中执行的指令我们称为Java字节码指令,无论是系统虚拟机还是程序虚拟机,在上面运行的软件都被限制于虚拟机提供的资源中。

JVM是java的核心和基础,在java编译器和os平台之间的虚拟处理器。它是一种基于下层的操作系统和硬件平台并利用软件方法来实现的抽象的计算机,可以在上面执行java的字节码程序。
java编译器只需面向JVM,生成JVM能理解的代码或字节码文件。Java源文件经编译器,编译成字节码程序,通过JVM将每一条指令翻译成不同平台机器码,通过特定平台运行

二、JVM生命周期:

1.启动:启动一个Java程序,拥有一个public static void main(String[]args)的class都可以作为JVM实例运行的起点。

2.运行:main()作为程序的七点,任何线程都可以由main线程启动

3.结束:程序中所有线程都终止,JVM才退出。

三、JVM的基本结构

1.类装载器:ClassLoader——用来装载.class文件,负责从文件系统或者网络加载Class信息,加载的信息存放在一块称之为方法区的内存空间。

2.执行引擎:执行字节符或者执行本地方法

3.运行时数据区:方法区、堆、java栈、PC寄存器、本地方法栈

        1)方法区:存放类的信息,常量信息,常量池信息,包括字符串字面量和数字常量

        2)Java堆:在Java虚拟机启动的时候建立Java堆,他是Java程序最主要的内存工作区域几乎所有的对象实例都存放到Java堆中,堆空间是所有线程共享

        3)Java栈:每个虚拟机线程都有一个私有栈,一个线程的Java栈在线程创建的时候被创建,Java栈保存着局部变量,方法参数,返回值等

        4)本地方法栈:和Java栈非常类似,最大不同为本地方法栈用于本地方法调用

4.五个内存空间

1)栈:存放局部变量

2)堆:存放所有new出来的东西

3)方法区:被虚拟机加载是类信息,常量,静态常量等

4)程序计数器(和系统相关)

5)本地方法栈

————————————

 四、JDK、JRE、JVM三者的关系

1.jdk:java开发工具包

2.JRE:编写java语言必不可少的运行环境。

3.JVM:java虚拟机,实现跨平台的核心内容。java程序编译成.class的类文件,在虚拟机上执行。

4.三者关系:JDK包含JRE,JRE又包含JVM的关系

五、JVM的垃圾回收

  1.判断对象存活      1)引用计数器法

            2) 可达性分析算法

    2.引用

     强引用,软引用,弱引用,虚引用

    3.Finalize方法(自救)

    1)回收方法区      废弃常量和无用的类

    2) 标记—清除算法(mark-sweep)

    3)复制算法(copying)

    4) 标记整理算法(mark-compact)

    5) 分代收集算法

原文地址:https://www.cnblogs.com/yanglanlan/p/11075103.html