分析Java因为语言慢
Java在早期的(例JDK1.2一旦)这是很慢。也许是因为有很多的优化,以提高装置的版本号,Java这是越来越快,所以这是现在非常的Java和C/C++什么什么慢速争议。
我想我自己的理解。谈论的影响Java因素程序的执行速度。
1、 GC回收
众所周知,Java相对C/C++的一个非常大进步就是有了GC机制。它可以非常大程序的避免C/C++常见的内存泄漏的发生。可是这也是有代价的。那就是由于JVM管理了全部内存分配释放,当内存不够时就须要做回收,每次回收都有扫描整个堆,然后要搬移一些内存数据,新生代还好。假设是老年代的GC。会造成程序卡顿一段时间。非常多时候是不能接受的。也极大的拖慢了程序的执行速度。尽管GC算法在不断改进。可是也属于仅仅能优化不能根治。
2、 解释性语言
Java为了跨平台。没有直接编译成机器指令,而是编译成字节码,执行时JVM须要载入这些字节码,然后再逐条解释执行。
这个过程中,字节码的载入须要时间。然后解释执行也须要时间。
做相同一件事情。编译语言能够直接编译成机器码。执行时CPU就直接执行这些指令,而Java是编译成字节码,执行时JVM要把字节码翻译成目标机器的可执行指令,这里面就添加了一层间接性,所以也会减少执行速度。
3、 JIT消耗资源
JIT是Java兴许版本号的改进功能,能把常执行的方法或者语句块即时编译成机器码,这样确实能加快执行速度。
可是这样的编译是即时发生,会和程序本身抢用执行资源,就会拖慢程序执行的速度。
4、 基于栈的指令集
编译语言多採用基于目标平台寄存器的指令集。这样能充分利用寄存器的快速度。
Java为了可移植性,没有绑定某个目标平台的寄存器。而是採用基于栈的指令集。频繁的栈内存訪问会导致比較慢的速度,而且通常编译同样语句产生的指令数量也要多于寄存器指令集。
5、 大量使用堆内存
Java中对象创建被JVM托管。可以避免越界或空指针訪问之类在C/C++中常见的问题。因此对象大多是创建在堆上的,而不是栈上的,其创建和维护成本上通常要更高一些。
6、 AOT技术
AOT技术能够在字节码安装到目标平台时。先编译成目标平台的运行文件,这样目标平台就能够直接运行可运行文件。速度上能够达到编译类语言的水平。可是这样会导致Java所拥有的动态载入功能丧失,全部字节码都被编译到运行文件,不论其在运行时是否被使用到,并造成其产生的可运行文件相对于字节码来说体积更大。
总言而之,Java因为其跨平台且管理内存等特性。给开发效率带来了诸多进步。可是凡事有利也有弊。伴随而来的是执行效率的减少。充分了解这些优势和劣势,才干在合适的时候选择合适的技术,为了最大限度地提高性能。
(完)
版权声明:本文博客原创文章。博客,未经同意,不得转载。
分析Java因为语言慢的更多相关文章
- 透过byte数组简单分析Java序列化、Kryo、ProtoBuf序列化
序列化在高性能网络编程.分布式系统开发中是举足轻重的之前有用过Java序列化.ProtocolBuffer等,在这篇文章这里中简单分析序列化后的byte数组观察各种序列化的差异与性能,这里主要分析Ja ...
- 【JVM】深度分析Java的ClassLoader机制(源码级别)
原文:深度分析Java的ClassLoader机制(源码级别) 为了更好的理解类的加载机制,我们来深入研究一下ClassLoader和他的loadClass()方法. 源码分析 public abst ...
- 从虚拟机指令执行的角度分析JAVA中多态的实现原理
从虚拟机指令执行的角度分析JAVA中多态的实现原理 前几天突然被一个"家伙"问了几个问题,其中一个是:JAVA中的多态的实现原理是什么? 我一想,这肯定不是从语法的角度来阐释多态吧 ...
- Notes 20180506 : Java程序设计语言概述
2.Java程序设计语言概述 如果对于开发语言的排行榜有所关注的话,那么会发现很长一段时间以来Java都是位居榜首的高级开发语言,作为一个Java开发者,为此感到骄傲的同时也深感忧虑,骄傲的是自己接触 ...
- Java程序语言的后门-反射机制
在文章JAVA设计模式-动态代理(Proxy)示例及说明和JAVA设计模式-动态代理(Proxy)源码分析都提到了反射这个概念. // 通过反射机制,通知力宏做事情 method.invoke(obj ...
- 如何利用 JConsole观察分析Java程序的运行,进行排错调优
原文链接:http://jiajun.iteye.com/blog/810150 一.JConsole是什么 从Java 5开始 引入了 JConsole.JConsole 是一个内置 Java 性能 ...
- 利用jdk自带的运行监控工具JConsole观察分析Java程序的运行
利用jdk自带的运行监控工具JConsole观察分析Java程序的运行 原文链接 一.JConsole是什么 从Java 5开始 引入了 JConsole.JConsole 是一个内置 Java 性能 ...
- google-perftools 分析JAVA 堆外内存
google-perftools 分析JAVA 堆外内存 分类: j2se2011-08-25 21:48 3358人阅读 评论(4) 收藏 举报 javahbasehtml工具os 原文转自:htt ...
- 用jmap分析java程序
之前的随笔提到用jstack分析java线程情况,也是在这个项目中,当线程的问题解决之后,发现程序的内存一直增长,于是用jmap工具分析了一下java程序占用内存的情况. 命令很简单,直接 jmap ...
随机推荐
- angular cors跨域资源共享设置 和formdata设定
非常easy,下来容易找到: <pre name="code" class="javascript">.config(['$routeProvide ...
- AngularJS 实现按需异步加载
习惯了 seajs 的异步加载方式,也想着 angular 也能同样使用异步加载,但是事实不随人愿. angularjs 和 requirejs 一样,使用的是预先加载的方式组织模块(这和 seajs ...
- LinbDesk --- 新的extjs4.2 desktop demo : 技术交流Q群:336584192
很多朋友对extjs desktop感兴趣,就在原来简单的dsktop基础上,作了很多拓展 主要例如以下: 软件更新情况介绍: LinbDesk 拓展自Extjs 4.2的桌面Demo 拓展代码适用 ...
- Hadoop获得先进的步步高(四)-试Hadoop
四.试Hadoop 一个简单的求每年温度最大值的程序. 1.准备两个文本測试数据 准备两个名为data1.txt及data2.txt的文件.用于做为计算的输入数据,将其放于/home/fenglibi ...
- C# 获得Excel工作簿Sheet页面(工作表)集合的名称
#region 获取Excel工作薄中Sheet页(工作表)名集合 /// <summary> /// 获取Excel工作薄中Sheet页(工作表)名集合 /// </summary ...
- 比float更好的页面布局inline-block
一:页面布局的发展过程 桌格设计 表格+css div+css的浮动布局 div+css的内联块布局 二:流行多年的浮动布局的优劣 优势: div+css浮动布局的优势,主要是相对于table布局来说 ...
- Android 定义自己的学习(5)它们的定义Progressbar
它们的定义View最后的研究,首先在效果图. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxNDE2MzcyNg==/font/5a6L5L2T/f ...
- 用python3.x与mysql数据库构建简单的爬虫系统(转)
这是在博客园的第一篇文章,由于本人还是一个编程菜鸟,也写不出那些高大上的牛逼文章,这篇文章就是对自己这段时间学习python的一个总结吧. 众所周知python是一门对初学编程的人相当友好的编程语言, ...
- cocos2dx 解释二具体的启动过程:内存管理和回调
在上一篇的第二部分中.我们有一句代码待解释的: // Draw the Scene void CCDirector::drawScene(void) { -... //tick before ...
- 动态传递参数到DevExpress.XtraReports的小结
原文:动态传递参数到DevExpress.XtraReports的小结 前两种方法和WinForm一样,可以传递参数.数组.实体对象.DataTable等1. 采用构造函数具体用法:在Report中p ...