当前位置: 技术问答>java相关
java 基础:java的速度为什么慢!
来源: 互联网 发布时间:2015-02-03
本文导语: 相比较来说,java的速度为什么慢呢?请详细告知。谢谢 | java和VC,VB不同,不是本地代码,java为了实现平台无关性,即java生成的class文件都能在不同的系统中运行,即"一次编码到处使用",是在各个系...
相比较来说,java的速度为什么慢呢?请详细告知。谢谢
|
java和VC,VB不同,不是本地代码,java为了实现平台无关性,即java生成的class文件都能在不同的系统中运行,即"一次编码到处使用",是在各个系统中一边编译一边执行,肯定会慢.
不象vc,vb中已经在本机作出本地代码.即exe,dll文件.但这些文件一旦换一个系统,例如从windows 到UNIX,就根本不能运行.
具体内容可以看一看编译原理,大学的课程.
不象vc,vb中已经在本机作出本地代码.即exe,dll文件.但这些文件一旦换一个系统,例如从windows 到UNIX,就根本不能运行.
具体内容可以看一看编译原理,大学的课程.
|
你可以看一下Java虚拟机规范,JVM是一种堆栈机,所有的对象都在堆上分配,所有的局部变量都放在栈上,没有寄存器,所以即使用JIT也很难达到很高的速度。
|
同意struct的意见,JVM就是用软件实现的一个CPU,可以将二者做简单的对比:
1。java程序经过编译后形成的bytecode相当于CPU的汇编指令
2。bytecode的执行是在堆栈中,而CPU指令的执行在寄存器(硬件)中。
举个简单的例子:两个数相加。
java中对应的bytecode为"iadd",CPU指令为"add",iadd的功能是把堆栈(一块内存)顶部的数弹出来并与此时的堆栈顶部相加,源码是
long temp = popStack();
*(long*)sp += temp;
也就是说,取操作数、相加、放回结果都是用软件实现的。
而其它未用虚拟机的程序(C)执行时已经是在执行机器代码了,同样一个add,这里是把操作数从内存装入寄存器、然后使用加法器相加,最后放回内存,都是用硬件实现的。
一个用软件执行程序、一个用硬件,也就不难理解为什么java程序会慢了。
1。java程序经过编译后形成的bytecode相当于CPU的汇编指令
2。bytecode的执行是在堆栈中,而CPU指令的执行在寄存器(硬件)中。
举个简单的例子:两个数相加。
java中对应的bytecode为"iadd",CPU指令为"add",iadd的功能是把堆栈(一块内存)顶部的数弹出来并与此时的堆栈顶部相加,源码是
long temp = popStack();
*(long*)sp += temp;
也就是说,取操作数、相加、放回结果都是用软件实现的。
而其它未用虚拟机的程序(C)执行时已经是在执行机器代码了,同样一个add,这里是把操作数从内存装入寄存器、然后使用加法器相加,最后放回内存,都是用硬件实现的。
一个用软件执行程序、一个用硬件,也就不难理解为什么java程序会慢了。