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因为语言慢的更多相关文章

  1. 透过byte数组简单分析Java序列化、Kryo、ProtoBuf序列化

    序列化在高性能网络编程.分布式系统开发中是举足轻重的之前有用过Java序列化.ProtocolBuffer等,在这篇文章这里中简单分析序列化后的byte数组观察各种序列化的差异与性能,这里主要分析Ja ...

  2. 【JVM】深度分析Java的ClassLoader机制(源码级别)

    原文:深度分析Java的ClassLoader机制(源码级别) 为了更好的理解类的加载机制,我们来深入研究一下ClassLoader和他的loadClass()方法. 源码分析 public abst ...

  3. 从虚拟机指令执行的角度分析JAVA中多态的实现原理

    从虚拟机指令执行的角度分析JAVA中多态的实现原理 前几天突然被一个"家伙"问了几个问题,其中一个是:JAVA中的多态的实现原理是什么? 我一想,这肯定不是从语法的角度来阐释多态吧 ...

  4. Notes 20180506 : Java程序设计语言概述

    2.Java程序设计语言概述 如果对于开发语言的排行榜有所关注的话,那么会发现很长一段时间以来Java都是位居榜首的高级开发语言,作为一个Java开发者,为此感到骄傲的同时也深感忧虑,骄傲的是自己接触 ...

  5. Java程序语言的后门-反射机制

    在文章JAVA设计模式-动态代理(Proxy)示例及说明和JAVA设计模式-动态代理(Proxy)源码分析都提到了反射这个概念. // 通过反射机制,通知力宏做事情 method.invoke(obj ...

  6. 如何利用 JConsole观察分析Java程序的运行,进行排错调优

    原文链接:http://jiajun.iteye.com/blog/810150 一.JConsole是什么 从Java 5开始 引入了 JConsole.JConsole 是一个内置 Java 性能 ...

  7. 利用jdk自带的运行监控工具JConsole观察分析Java程序的运行

    利用jdk自带的运行监控工具JConsole观察分析Java程序的运行 原文链接 一.JConsole是什么 从Java 5开始 引入了 JConsole.JConsole 是一个内置 Java 性能 ...

  8. google-perftools 分析JAVA 堆外内存

    google-perftools 分析JAVA 堆外内存 分类: j2se2011-08-25 21:48 3358人阅读 评论(4) 收藏 举报 javahbasehtml工具os 原文转自:htt ...

  9. 用jmap分析java程序

    之前的随笔提到用jstack分析java线程情况,也是在这个项目中,当线程的问题解决之后,发现程序的内存一直增长,于是用jmap工具分析了一下java程序占用内存的情况. 命令很简单,直接 jmap ...

随机推荐

  1. [ACM] POJ 2342 Anniversary party (树DP获得冠军)

    Anniversary party Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4410   Accepted: 2496 ...

  2. 谈到一些传统的企业网站SEO问题领域

    在网络营销中的时间越长,有时候,企业网站还是有一些传统做法不解.也许,这是它的思想的局限.比如,我最近来到了一个新的工作环境中发现,虽然公司是专业从事传统渠道已经很不错了,但对于网络营销渠道还有改进的 ...

  3. hdu 2067 兔子板

    兔子板 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  4. 具体分析Struts工作流程

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXV3ZW56aGU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA ...

  5. Light OJ 1341 Aladdin and the Flying Carpet Pollard_rho整数分解+DFS

    进入a b 多少努力p, q 使p*q == a && p < q && p >= b 直接大整数分解 然后dfs所有可能的解决方案劫持 #include ...

  6. HDU 1877 另一个版本 A+B

    另一个版本 A+B Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  7. RabbitHub开源

    RabbitHub开源情况及计划   之前写过一篇”.NET 平台下的插件化开发内核(Rabbit Kernel)”,已经过去三个月了,期间RabbitHub并不是没有了发展更不是放弃了发展,在Rab ...

  8. 导入三方包,出现ClassNotFoundException

    在项目中须要引用settings模块里面的某个活动.在eclipse中导入settins.jar包之后,使用例如以下方式启动: Intent intent = new Intent(); intent ...

  9. crawler_工具类_RegexUtils_正则帮助类

    package com.cph.crawler.core.utils; import java.util.ArrayList; import java.util.List; import java.u ...

  10. 位记录——Windows 7已安装Sublime Text 3、cynwin、SublimeClang

    转载请注明出处:http://blog.csdn.net/cywosp/article/details/34429697 1. 到https://www.cygwin.com/下载setup-x86_ ...