分析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 ...
随机推荐
- iOS一个开发系列中 - UIButton 使用摘要
// 初始化button并设置类型 UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; // 可以定义的UIButto ...
- (大数据工程师学习路径)第一步 Linux 基础入门----命令执行顺序控制与管道
介绍 顺序执行.选择执行.管道.cut 命令.grep 命令.wc 命令.sort 命令等,高效率使用 Linux 的技巧. 一.命令执行顺序的控制 1.顺序执行多条命令 通常情况下,我们每次只能在终 ...
- redis安装和配置教程phpredis扩展安装测试
作者:zhanhailiang 日期:2014-10-16 推荐阅读: Redis持久化策略 关于Redis很多其它资料阅读 1. 下载redis-2.8.17.tar.gz:http://downl ...
- Android变化如何破解几场金
我们在玩游戏的总会遇到一些东西需要购买,但是,我们可能要花钱,那么我们应该怎么办呢?这与游戏的插.我们在这里谈论的Android游戏,搜索互联网上的移动端游戏插件,您可能会发现一个叫段:八门神器.ap ...
- groovy install,gvm,groovysh简述(转)
1.1 安装Groovy Groovy主页:http://www.groovy-lang.org 确保本地系统安装了Java 1.1.1 在Windows系统上安装Groovy 1.创建环境变量GRO ...
- Python 基于学习 网络小爬虫
<span style="font-size:18px;"># # 百度贴吧图片网络小爬虫 # import re import urllib def getHtml( ...
- ASP.NET MVC5 插件机制中插件的简单实现
Autofac 依赖注入 ASP.NET MVC5 插件机制中插件的简单实现 一.前言 由于项目业务复杂,创建了多个插件并把他们放在了不同的项目中,项目使用AutoFac做的IOC:但是主项目可以注入 ...
- 体验VS2015正式版
初次体验VS2015正式版,安装详细过程. 阅读目录 介绍 安装 介绍 纽约时间7月20日,微软发布了vs 2015 正式版,换算到我们的北京时间就是晚上了,今天回到家里,就下下来了,装上去 ...
- LESS使用介绍
使用: 在客户端使用 引入你的 .less 样式文件的时候要设置 rel 属性值为 "stylesheet/less": <link rel="stylesheet ...
- HDU 1877 另一个版本 A+B
另一个版本 A+B Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...