JVM上最昂贵的操作是什么?

2 java jvm

我记得我的教授说new操作是JVM上最昂贵的操作.这是真的?我的意思是,比打开文件更昂贵?我怎么知道Java中任何操作的成本?例如,找出它们之间的区别

int a;
Integer b;
Integer c = new Integer(1);
int[] d = new int[10];
Integer[] e = new Integer[10];
Run Code Online (Sandbox Code Playgroud)

zne*_*eak 8

这是特定于实现的.有可能在现代JVM上,这些都不会带来任何成本.即时编译时,一些JVM会检测到您的对象没有逃脱函数的范围,并将在堆栈上"免费"分配它们.

您无法真正测量JVM上最昂贵的操作.如果知道某些东西是昂贵的,可能就是这样,Sun Oracle的某个人正在努力降低成本,接下来你知道它将是恒定时间.

在任何编程中唯一被认为是昂贵的东西应该是你的算法.

  • ...和数据库查询. (3认同)

esa*_*saj 6

真的不能说什么是最贵的,但我很确定它不是新的(当然你的构造函数可能很重,如果它做了很多事情):

HotSpot 1.4.2及更高版本中新Object()的公共代码路径大约是10个机器指令(Sun提供的数据;请参阅参考资料),而C中表现最佳的malloc实现平均需要每次调用60到100条指令( Detlefs,et.al.;请参阅参考资料).分配性能不是整体性能的一个微不足道的组成部分 - 基准测试表明,许多真实的C和C++程序,如Perl和Ghostscript,在malloc和free中花费的总执行时间的20%到30% - 远远超过健康的Java应用程序的分配和垃圾收集开销

来自这个文章,请注意,它谈论JVM 1.4.2(文章发表于2005年).这是 2003年另一个,谈论一些Java性能神话仍在盘旋.而较新的JVM应该比那些时代的版本快得多.