文档章节

【Java系统监控与优化系统系列】——1.3 代码执行

Albert-Liu
 Albert-Liu
发布于 2015/01/19 15:49
字数 806
阅读 56
收藏 0

1.3.1 解释执行

(1)概述

    解释执行就是将字节码在位于内存上的“基于栈的指令集执行引擎”中直接执行

(2)指令集比较

   a.基于栈的指令集(字节码)

        优点

            可移植性

                寄存器由硬件直接提供,程序直接依赖这些硬件寄存器则不可避免地要受到硬件的约束。

                使用栈架构的指令集,用户程序不会直接用到这些寄存器,那就可以由虚拟机实现来自行决定把一些访问最频繁的数据(程序计数器、栈顶缓存等)放到寄存器中以获取尽量好的性能,这样实现起来也更加简单

            代码相对更加紧凑

                字节码中每个字节就对应一条指令,而多地址指令集中还需要存放参数

            编译器实现更加简单

                不需要考虑空间分配的问题,所需空间都在栈上操作

        缺点

            执行速度慢

            指令数量多

                指令数量比寄存器架构多,因为出栈、入栈操作本身就产生了很多指令

            内存访问慢

                 栈在内存中实现,内存速度比CPU速度慢

    b.基于寄存器的指令集(机器码)

        优点

            执行速度快

        缺点

            平台相关


1.3.2 编译执行

(1)概述

    即时编译器并不是虚拟机必需的部分,Java虚拟机规范并没有规定Java虚拟机内必须要有即时编译器存在,更没有限定或指导即时编译器如何实现。因此不同的虚拟机有不同的实现方式

    编译的结果是将字节码转换成平台相关的机器码,这些机器码将在CPU的寄存器上运行

(2)解释器与编译器的比较

    当程序需要迅速启动和执行时,解释器可以首先发挥作用,省去编译时间,立即执行。

    在程序运行后,随着时间的推移,编译器逐渐发挥作用,把越来越多的代码编译成本地代码之后,可以获得更高的执行效率。

    当程序运行环境中内存资源限制较大(如部分嵌入式系统中),可以使用解释执行节约内存,反之可以使用编译执行提升效率。

    解释器还可以作为编译器激进优化时的一个"逃生门",让编译器根据概率选择一些大多数时候都能提升运行速度的优化手段,当激进优化假设不成立时可以通过“逆优化”退回到解释状态继续执行

    以上也是“为何虚拟机要使用解释器与编译器并存的架构”的原因

1.3.3 内存管理

    内存管理分为:运行时数据区和内存分配与回收两大部分,每一部分的内容都比较多,将单独进行介绍

© 著作权归作者所有

Albert-Liu
粉丝 7
博文 19
码字总数 12128
作品 0
深圳
架构师
私信 提问
JVM系列第2讲:Java 虚拟机的历史

说起 Java 虚拟机,许多人就会将其与 HotSpot 虚拟机等同看待。但实际上 Java 虚拟机除了 HotSpot 之外,还有 Sun Classic VM、Exact VM、BEA JRocketit、IBM J9 等等。今天我们就来简单回顾...

陈树义
2018/11/08
0
0
OSChina 技术周刊第二期

每周技术抢先看,总有你想要的! 移动开发 【软件】Google Android 官方培训课程中文版 【博客】iOS开发之Swift调用Objective-C代码 【博客】教你爱上Blocks(闭包)(iOS) 【博客】uick-co...

OSC编辑部
2014/09/28
12.1K
34
一步步优化JVM六:优化吞吐量[转]

原文:http://ganlv.iteye.com/blog/1571315 参考:http://www.myexception.cn/software-architecture-design/1455594.html 现代JVM是一个具有灵活适应各种应用能力的软件,尽管很多应用能够...

onedotdot
03/31
27
0
性能优化之Java(Android)代码优化

最新最准确内容建议直接访问原文:性能优化之Java(Android)代码优化 本文为Android性能优化的第三篇——Java(Android)代码优化。主要介绍Java代码中性能优化方式及网络优化,包括缓存、异步、...

Trinea
2013/08/26
2.6K
1
关于 Java Scripting API 您不知道的 5 件事

现在,许多 Java 开发人员都喜欢在 Java 平台中使用脚本语言,但是使用编译到 Java 字节码中的动态语言有时是不可行的。在某些情况中,直接编写一个 Java 应用程序的脚本 部分 或者在一个脚本...

红薯
2010/09/12
525
2

没有更多内容

加载失败,请刷新页面

加载更多

idea修改新的git地址

我们在项目变动中通常会遇到更换git地址情况,这里介绍一个在idea项目中简单更换git地址操作: 1、点击VCS; 2、点击Git; 3、点击Remotes; 具体步骤如图 4、点击框中链接即可在右边看到一个...

west_coast
17分钟前
6
0
将规则集传递给mixin

允许包装在mixin中定义的css块。 分离的规则集是一组CSS属性、嵌套规则集、媒体声明或者是存储在变量中的任何其他内容,我们可以将它包含在规则集中或其他结构中,并且所有属性都将复制到那里...

凌兮洛
19分钟前
4
0
玩转阿里云 Terraform(一):Terraform 是什么

从本文起,我将陆续推出一系列有关 Terraform 的文章,从概念,特点,工作机制,用法以及最佳实践等多个方面由浅入深的向大家介绍如何在阿里云上玩转 Terraform。同时也希望借此机会,与感兴...

阿里云官方博客
19分钟前
4
0
科研大数据面临的挑战

近几十年硬件的发展非常迅猛,第一台Macintosh苹果电脑的内存是128KB(0.13MB),现在很多笔记本配的是8GB的内存,硬盘1TB(1024GB),2TB的很常见。大型的数据服务器上还会有更大的储容量,...

英论阁学术院
19分钟前
5
0
python学习10.09:Python列表和元组的底层实现

有关列表(list)和元组(tuple)的底层实现,本节分别从它们的源码来进行分析。 首先来分析 list 列表,它的具体结构如下所示: typedef struct { PyObject_VAR_HEAD /* Vector o...

太空堡垒185
20分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部