JVM小记二

C和C++代码无需额外的运行,可以直接编译成CPU能够理解的机器码,

为什么Java要在虚拟机里运行?

1,Java作为一门高级程序语言,语法非常复杂,抽象程度很高,直接在硬件上运行并不现实。

2,脱离底层硬件的依赖,只要能够安装虚拟机,就可以实现一次编写,到处运行。

3,虚拟机带来了托管环境,能够替代码处理冗长而且容易出错的部分。如自动内存管理,垃圾回收,数组越界,动态类型转换等。

 

Java如何运行的?

JAVA编译后生成class的字节码文件,class文件被JVM加载。加载后的Java类存放在方法区,运行时JVM从方法区调用Java类。

JVM存放Java的空间分为:方法区,堆,本地方法栈,Java方法栈,PC计数器

方法区:存放加载后的Java类

堆:存放运行时Java类对象

本地方法栈:局部变量和字节码的操作数

PC计数器:不同线程的执行位置

本地方法栈:C++代码的局部变量和字节码操作数

Java编译成class文件后,被JVM翻译成机器码的过程主要有两种方式:解释执行和即时编译 

 

Java的8种基本类型:int,char,byte,double,float,short,long,boolean

Java作为面向对象的语言,为什么要保存8种基本类型,而不是所有都面向对象?

为了在执行效率和内存方面提升性能

 

JVM如何加载Java类?

Java编译成class文件,然后被JVM加载到内存中成为可以运行的对象,主要分为三个步骤:加载,链接,初始化

加载:启动类加载,扩展类加载(平台类加载),应用类加载;双亲委派模型

链接:验证,准备,解析。准备:为类的静态字段分配内存;解析:符号引用解析为实际引用

初始化:

1,虚拟机启动时,初始化用户指定的主类

2,遇到用户新建目标实例new指令时,初始化new指令的目标类

3,静态方法指令时,初始化静态方法所在的类

4,访问静态字段指令时,初始化静态字段所在的类

5,子类初始化会触发父类初始化

6,接口定义了default方法,直接实现或者间接实现接口的类初始化,触发接口初始化

7,反射API调用对某个类进行反射调用

8,调用MethodHandle实例时

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值