草庐IT

java - Java 静态调用比非静态调用更贵还是更便宜?

以一种或另一种方式有任何性能优势吗?它是编译器/虚拟机特定的吗?我正在使用热点。 最佳答案 首先:您不应该根据性能来选择静态还是非静态。第二:在实践中,它不会有任何区别。Hotspot可能会选择以使一种方法的静态调用更快、另一种方法的非静态调用更快的方式进行优化。第三:围绕静态与非静态的许多神话要么基于非常古老的JVM(它没有做任何接近Hotspot所做的优化),或者一些内存中的关于C++的琐事(其中动态调用使用比静态调用多一个内存访问)。 关于java-Java静态调用比非静态调用更贵

java - Java 静态调用比非静态调用更贵还是更便宜?

以一种或另一种方式有任何性能优势吗?它是编译器/虚拟机特定的吗?我正在使用热点。 最佳答案 首先:您不应该根据性能来选择静态还是非静态。第二:在实践中,它不会有任何区别。Hotspot可能会选择以使一种方法的静态调用更快、另一种方法的非静态调用更快的方式进行优化。第三:围绕静态与非静态的许多神话要么基于非常古老的JVM(它没有做任何接近Hotspot所做的优化),或者一些内存中的关于C++的琐事(其中动态调用使用比静态调用多一个内存访问)。 关于java-Java静态调用比非静态调用更贵

java - 为什么处理排序数组比未排序数组*慢*? (Java 的 ArrayList.indexOf)

标题引用Whyisitfastertoprocessasortedarraythananunsortedarray?这也是分支预测效果吗?注意:这里对排序数组的处理是更慢!!考虑以下代码:privatestaticfinalintLIST_LENGTH=1000*1000;privatestaticfinallongSLOW_ITERATION_MILLIS=1000L*10L;@TestpublicvoidtestBinarySearch(){Randomr=newRandom(0);Listlist=newArrayList(LIST_LENGTH);for(inti=0;i(li

java - 为什么处理排序数组比未排序数组*慢*? (Java 的 ArrayList.indexOf)

标题引用Whyisitfastertoprocessasortedarraythananunsortedarray?这也是分支预测效果吗?注意:这里对排序数组的处理是更慢!!考虑以下代码:privatestaticfinalintLIST_LENGTH=1000*1000;privatestaticfinallongSLOW_ITERATION_MILLIS=1000L*10L;@TestpublicvoidtestBinarySearch(){Randomr=newRandom(0);Listlist=newArrayList(LIST_LENGTH);for(inti=0;i(li

java - 是什么让 Java 比 C 更容易解析?

我知道thegrammarsofCandC++arecontext-sensitive,特别是您需要在C中使用“lexerhack”。另一方面,我的印象是,尽管这两种语言之间存在相当大的相似性,但您可以仅使用2个前瞻标记来解析Java。您需要对C进行哪些更改以使其更易于解析?我之所以这么问,是因为我看到的所有关于C上下文敏感性的示例在技术上都是允许的,但非常奇怪。例如,foo(a);可以使用参数a调用void函数foo。或者,可以将a声明为foo类型的对象,但您也可以轻松摆脱括号。部分原因是因为Cgrammar的“直接声明符”产生规则实现了声明函数和变量的双重目的。另一方面,Javag

java - 是什么让 Java 比 C 更容易解析?

我知道thegrammarsofCandC++arecontext-sensitive,特别是您需要在C中使用“lexerhack”。另一方面,我的印象是,尽管这两种语言之间存在相当大的相似性,但您可以仅使用2个前瞻标记来解析Java。您需要对C进行哪些更改以使其更易于解析?我之所以这么问,是因为我看到的所有关于C上下文敏感性的示例在技术上都是允许的,但非常奇怪。例如,foo(a);可以使用参数a调用void函数foo。或者,可以将a声明为foo类型的对象,但您也可以轻松摆脱括号。部分原因是因为Cgrammar的“直接声明符”产生规则实现了声明函数和变量的双重目的。另一方面,Javag

java - 为什么在 x64 Java 中 long 比 int 慢?

我在SurfacePro2平板电脑上运行Windows8.1x64和Java7更新45x64(未安装32位Java)。当i的类型是long时,下面的代码需要1688毫秒,而当i是int时,需要109毫秒。为什么在带有64位JVM的64位平台上long(64位类型)比int慢一个数量级?我唯一的猜测是CPU添加64位整数比添加32位整数需要更长的时间,但这似乎不太可能。我怀疑Haswell不使用波纹进位加法器。我在EclipseKeplerSR1中运行它,顺便说一句。publicclassMain{privatestaticlongi=Integer.MAX_VALUE;publicst

java - 为什么在 x64 Java 中 long 比 int 慢?

我在SurfacePro2平板电脑上运行Windows8.1x64和Java7更新45x64(未安装32位Java)。当i的类型是long时,下面的代码需要1688毫秒,而当i是int时,需要109毫秒。为什么在带有64位JVM的64位平台上long(64位类型)比int慢一个数量级?我唯一的猜测是CPU添加64位整数比添加32位整数需要更长的时间,但这似乎不太可能。我怀疑Haswell不使用波纹进位加法器。我在EclipseKeplerSR1中运行它,顺便说一句。publicclassMain{privatestaticlongi=Integer.MAX_VALUE;publicst

java - 为什么 ArrayDeque 比 LinkedList 好

我试图理解为什么Java的ArrayDeque比Java的LinkedList更好,因为它们都实现了Deque接口(interface)。我几乎看不到有人在他们的代码中使用ArrayDeque。如果有人对ArrayDeque的实现方式有更多的了解,那将会很有帮助。如果我理解它,我会更有信心使用它。我无法清楚地理解JDK实现管理头尾引用的方式。 最佳答案 链接结构可能是最糟糕的迭代结构,每个元素都会出现缓存未命中。最重要的是,它们会消耗更多的内存。如果您需要添加/删除两端,ArrayDeque明显优于链表。对于循环队列,随机访问每个元

java - 为什么 ArrayDeque 比 LinkedList 好

我试图理解为什么Java的ArrayDeque比Java的LinkedList更好,因为它们都实现了Deque接口(interface)。我几乎看不到有人在他们的代码中使用ArrayDeque。如果有人对ArrayDeque的实现方式有更多的了解,那将会很有帮助。如果我理解它,我会更有信心使用它。我无法清楚地理解JDK实现管理头尾引用的方式。 最佳答案 链接结构可能是最糟糕的迭代结构,每个元素都会出现缓存未命中。最重要的是,它们会消耗更多的内存。如果您需要添加/删除两端,ArrayDeque明显优于链表。对于循环队列,随机访问每个元