JVM基础(1)

JVM基础(1)

1.Java的跨平台性

能跨平台的是Java程序,而不是JVM。
JVM是用C/C++开发的,是编译后的机器码,不能跨平台,不同平台下需要安装不同版本的JVM。
JVM(Java虚拟机)就是负责将字节码文件翻译成特定平台下的机器码,然后运行。
只要在不同平台上安装对应的JVM,就可以运行字节码文件,即运行Java程序。
我把它理解为,人类之间表达的语言可以当做JVM,而语言表达的含义当做程序员写的Java程序。世界上语言有很多,而我们所表达的含义不受语言类型的改变。

2.JVM

(1)JVM概念

JVM(Java虚拟机),是Java的核心和基础,是Java编译器和OS平台之间的虚拟处理器。
JVM有自己完善的硬件架构,如处理器,堆栈,寄存器等,还有相应的指令系统,但它只是一种用软件方法实现的抽象的计算机,且基于下层的操作系统和硬件平台,可以在上面执行java的字节码程序。
使用JVM,就不用担心你在什么平台上写的代码程序,至于JVM如何与底层平台沟通,是JVM自己的事情。

(2)JVM生命周期
  • 1、启动和消亡:
    JVM负责运行一个Java程序。当启动一个Java程序时,一个Java虚拟机实例也就诞生了。
    JVM运行起点:Java虚拟机实例通过调用某个初始类的main()方法来运行一个Java程序。
    当程序关闭退出时,这个虚拟机实例也就随之消亡。
  • 2、JVM两种线程:
    守护线程 and 非守护线程
    (1)守护线程
    通常是由虚拟机自己使用的,比如执行垃圾收集任务的线程。但Java程序也可以把创建的线程标记为守护线程。
    (2)非守护线程
    Java中的初始线程main()的线程就是非守护线程。
    只要有任何非守护线程在运行,那么这个Java程序也在继续运行。当该程序中的所有的非守护的线程都终止时,虚拟机实例将会自动退出。
  • 3、JVM退出的几种可能原因:
    &1、自动退出:
    程序正常运行结束。
    程序运行过程中遇到异常或错误而异常退出。
    操作系统的异常导致JVM进程终止。
    &2、手动退出:
    通过调用Runtime类或者System类的exit()方法来退出。
JVM的工作过程
  • 类加载机制:
  • Java类加载以下作为补充:
    虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。
  • 类加载的时机:
    类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括了:加载、验证、准备、解析、初始化、使用和卸载七个阶段。
    其中验证、准备和解析三个部分统称为连接。
    类的生命周期
    加载、验证、准备、初始化和卸载这五个阶段的顺序是确定的,类的加载必须按照这种顺序开始。而解析阶段不一定:它在某些情况下可以在初始化之后再开始。
  • 对于初始化阶段,虚拟机规范则是严格规定了有且只有的以下情况:
    (1)遇到new、getstatic、putstatic或invokestatic这四条字节码指令时,如果类没有进行初始化,则需要先触发其初始化。
    生产这四条指令的常见场景:
    使用new关键字实例化对象的时候;
    读取或设置一个类的静态字段(被final修饰、已在编译期就把结果放在常量池的静态字段除外)的时候;
    调用一个类的静态方法的时候。
    (2)使用java.lang.reflect包的方法对类进行反射调用的时候,如果类没有进行初始化,则需要先触发其初始化。
    (3)当初始化一个类的时候,如果发现其父类还没有进行过初始化,则需要先触发其父类的初始化。
    (4)当虚拟机启动时,用户需要指定一个执行的主类(包含main()方法的类),虚拟机会先初始化这个类。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值