JVM学习之执行引擎(4)

1 作为运行时实例的执行引擎就是一个线程,运行中java程序的每一个线程都是一个独立的虚拟机执行引擎的实例.

 

2 方法的字节码流是由java虚拟机的指令序列构成的,每一条指令包含一个单字节的操作码,后面跟随0个或多个操作数.虚拟机可能除了跟随操作码的操作数之外,还需要从另外一些存储区域得到操作数,当虚拟机执行一条指令时,可能使用当前常量池中的项,当前帧的局部变量中的值,或者位于当前帧操作数栈顶端的值

 

3 本地方法是java虚拟机指令集的一种可编程扩展,如果一条指令请求一个对本地方法的调用,执行引擎就会调用这个本地方法,运行这个本地方法就是java虚拟机对这条指令的执行,当本地方法返回了,虚拟机继续执行下一条指令,如果本地方法异常中止了(抛出了一个异常),虚拟机就按照好比是这条指令抛出这人异常一样的步骤来处理这个异常.

 

4 执行技术分析

    通常,程序有两种运行方式:静态编译与动态直译.静态编译的程序在执行前全部被翻译为机器码,而直译执行的则是一句一句边运行边翻译

 

(1)解释执行: 虚拟机对方法的字节码直接进行解析并执行

(2)传统即时编译: 在第一次执行方法字节码时先编译成本地代码,以后调用方法时就一直在本地机器上执行这段本地代码

(3)自适应优化: 可以查找代码热点,热点回退,内嵌

(4)芯片级直接执行

 

5 线程

 

(1)java线程的优先级是不可靠的

 

(2)对象锁定使独立运行的线程访问共享数据的时候互斥;线程等待和通知使得线程为了达到同一个目标而互相协同工作

 

(3)在Java虚拟机规范中,Java线程的行为是通过术语: 变量,主存和工作内存 来定义的,每一个java虚拟机实例都有一个主存,用于保存所有的程序变量(对象的实例变量,数组的元素以及类变量).每一个线程都有一个工作内存,线程用它保存所使用和赋值的变量的"工作拷备".局部变量和参数,因为它们是每个线程私有的,可以从逻辑上看成是工作内存或者主存的一部分.

 

■主存和工作内存跟运行时数据区有什么关联

 

(4)java虚拟机规范声明: 所有对基本类型的操作,除了某些对long类型和double类型的操作之处,都必须是原子级的. 所以java程序员必须确保通过同步来操作共享的long和double.

 

(5) 基本上,管理低层线程行为的规则,规定了一个线程何时可以做及何时必须做以下的事情:

把变量的值从主存拷贝到它的工作内存

把值从它的工作内存写回到主存

 

(6)所有管理线程行为的低层规则的高层含义是: 如果访问某个没有被同步的变量,允许线程用任何顺序来更新主存.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值