分析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 ...
随机推荐
- 在Mac OS上配置Android开发环境
1)安装配置NDK 1.1 下载NDK并解压缩 下载路径 https://developer.android.com/tools/sdk/ndk/index.html 在terminal运行: chm ...
- paip.将数据导入到在英语语音数据库mysql道路解决空原则问题
paip.将数据导入到在英语语音数据库mysql道路解决空原则问题 #---原因:mysql 导入工具bug #---解决:不要使用双引号括注音. 笔者 老哇爪 Attilax 艾龙. EMAIL: ...
- HDU 1712 ACboy needs your help(包背包)
HDU 1712 ACboy needs your help(包背包) pid=1712">http://acm.hdu.edu.cn/showproblem.php? pid=171 ...
- requireJS的使用_API-1
requireJS的使用_API(1) 之前有介绍过requireJS(模块化开发),可以看看 ,但是不详细,所以今天参考官网来详细介绍一下: 1.加载js文件: RequireJS的目标是鼓励代码的 ...
- ubuntu 14.04 安装搜狗拼音输入法
原文:ubuntu 14.04 安装搜狗拼音输入法 ubuntu桌面系统下终于有了好用的拼音法-搜狗拼音输入法,欲在ubuntu 14.04下安装搜狗拼音输入法相当的简单. 先到搜狗拼音官网下载对应的 ...
- asp.net学习之SqlDataSource
原文:asp.net学习之SqlDataSource 通过 SqlDataSource 控件,可以使用 Web 服务器控件访问位于关系数据库中的数据.其中可以包括 Microsoft SQL Serv ...
- ext panel 它们的定义图像刷新
从管理发展的近期回报.事实上,它采取了一些努力,以适应,应对来自另一个角度的问题只.外观似良好的效果.阿土,项目用到了EXT js.百度大神里面没找到一个合适的图片组件.自己写了个能够刷新的图片组件. ...
- "错: void 值不被忽略,因为预期"解决
在C陷阱与缺陷,实现assert什么时候,在这个过程很聪明,化为一个表达式,在当条件为假时就会调用_assert_error报错并终止程序. 刚開始_assert_error 的返回值类型是 void ...
- P31RestKit.dll 2.0 Unity3d json
using System.Collections.Generic; using UnityEngine; using System.Collections; using Prime31; public ...
- 手工制作的年份Java老A发售量
Java老A这本书是写了很长的时间,昨天终于开始china-pub.京东.活动当天发售的猫,现在,简称买卖,他当然还没有到. 有兴趣的人能够去看看哈(兴许其它站点地址也会在这里公开): china-p ...