分析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 ...
随机推荐
- 一、ExtJS下载使用
ExtJS下载 4.1 版本号: http://www.sencha.com/products/extjs/download/ext-js-4.1.1/1683 3.4 版本号:http://www. ...
- spring整合JMS - 基于ActiveMQ实现
一. 开篇语 继上一篇apache ActiveMQ之初体验后, 由于近期一直在复习spring的东西, 所以本文就使用spring整合下JMS. 二. 环境准备 1. ActiveMQ5.2.0 ( ...
- 源码编译安装 MySQL 5.5.x 实践(转)
1.安装cmakeMySQL从5.5版本开始,通过./configure进行编译配置方式已经被取消,取而代之的是cmake工具.因此,我们首先要在系统中源码编译安装cmake工具. # wget ht ...
- 关于继承modelDriven接口action的ajax来电参数
例如 Model类如下面,Teacher,public class Teacher{ private Integer id. priavte String name; private Sch ...
- 在.NET Fiddle有趣的沙盒代码
在.NET Fiddle有趣的沙盒代码 笔者:Tony Patton | 托尼·巴顿译:PurpleEndurer,2014-11-18,第1版 C#和VB.NET开发者能够使用.NET Fiddle ...
- Unity3D移动端内存优化(NGUI方面)
Unity3D引擎技术交流QQ群:[21568554] 做3d移动端内存一直是人们头疼的问题,载入的资源释放了,还有其它的须要释放.比方ngui释放,事实上主要是NGUI的Texture和Spr ...
- JavaEE(4) - JMS实现企业PTP消息处理
1. 在Weblogic服务器上配置PTP消息目的 配置持久化: Services-->Persistence Stores-->New(Create FileStore, Create ...
- C# 线程知识--使用Task执行异步操作
在C#4.0之前需要执行一个复杂的异步操作时,只能使用CLR线程池技术来执行一个任务.线程池执行异步任务时,不知道任务何时完成,以及任务的在任务完成后不能获取到返回值.但是在C#4.0中引人了一个的任 ...
- awk学习总结(两) How awk works and awk CMD in a file
测试文件names Tom Savage 100 Molly Lee 200 John Doe 300 $0 代表file的整行; $1,第一列;$2,第二列...... $ awk '/Tom/{p ...
- poj 2449 Remmarguts' Date 【SPFA+Astar】【古典】
称号:poj 2449 Remmarguts' Date 意甲冠军:给定一个图,乞讨k短路. 算法:SPFA求最短路 + AStar 以下引用大牛的分析: 首先,为了说话方便,列出一些术语: 在启示式 ...