Tag: 性能

几次调用Method / Field.getAnnotation(Class)与在Map中预缓存此数据的性能

我想知道是否有任何关于重复调用(在Java中) Method.getAnnotation(Class)和Method.getAnnotation(Class) Field.getAnnotation(Class)方法的性能的比较/研究,而不是存储(在程序启动时)预先计算的映射具有类的元数据信息并稍后重复查询。 哪一个可以提供最佳的运行时性能? 在Java 5,6和7下,这种性能是否相同?

Java Enums的性能?

我正在实施一个2人游戏,它将在紧密的循环中运行数十万次,然后是性能至关重要。 我的代码实际上看起来像这样: public class Table { private final int WHITE_PLAYER = +1; private final int BLACK_PLAYER = -1; private final int currentPlayer; private final int otherPlayer; … } 我想知道如果我选择更换会不会有任何性能损失 private final int WHITE_PLAYER = +1; private final int BLACK_PLAYER = -1; 枚举定义为 public enum Players { WhitePlayer, BlackPlayer } 我认为枚举只是整数常量的语法糖,并且对于测试枚举生成的字节码以及调用它的代码进行釉面查看,似乎表明使用它们确实与制作静态相同方法调用,但适用于首次运行时设置的某些枚举基础结构。 我的假设是,确实使用枚举作为静态常量是正确的还是我错过了什么?

如何有效地在Java中生成安全的随机字母数字字符串?

如何有效地在Java中生成安全的随机(或伪随机)字母数字字符串?

为什么Java在这里比C运行得更快?

灵感来自这个问题 , 现在仅对具有> 10k rep的用户可见 我想出了以下代码: $cat loop.c int main( int argc, char ** argv ) { int i = 0; while( i++ < 2147483647 ); } $cc -o loop loop.c $ time ./loop real 0m11.161s user 0m10.393s sys 0m0.012s $cat Loop.java class Loop { public static void main( String [] args ) { int […]

Hibernate为每个查询生成不同的SQL

我刚刚在探查器下测试了我的应用程序,发现sql字符串占用了大约30%的内存! 这很奇怪。 应用程序内存中存储了很多像这样的字符串。 这是由hibernate生成的SQL查询,请注意不同的数字和尾随下划线: select avatardata0_.Id as Id4305_0_,…… where avatardata0_.Id=? for update select avatardata0_.Id as Id4347_0_,…… where avatardata0_.Id=? for update 这是我无法理解的部分。 为什么hibernate必须为每个查询生成具有不同标识符的不同sql字符串,如“ Id4305_0_ ”? 为什么不能为所有相同的查询使用一个查询字符串? 这是绕过查询缓存的某种技巧吗? 如果有人能形容我为什么会这样,以及如何避免这种资源浪费,我将不胜感激。 UPDATE 好。 我找到了。 假设内存泄漏我错了,这是我的错。 Hibernate按预期工作。 我的应用程序在10个线程中创建了121(!)SessionFactories,它们生成了大约2300个SingleTableEntityPersisters实例。 每个SingleTableEntityPersister生成大约15个具有不同标识符的SQL查询。 Hibernate被迫生成大约345,000个不同的SQL查询。 一切都很好,没有什么奇怪的:)

使用大而密集的2D矩阵快速计算2D子矩阵?

在较大的密集矩阵中计算子矩阵的好算法是什么? 如果我有一行数据,我可以使用后缀树,但我不确定是否将后缀树推广到更高维度是完全简单或最好的方法。 思考? 我的天真解决方案是索引密集矩阵的第一个元素并消除全矩阵搜索,只提供了对全矩阵扫描的适度改进。 解决这个问题的最佳方法是什么? Example: Input: Full matrix: 123 212 421 Search matrix: 12 21 Output: 2 该子矩阵在全矩阵中出现两次 ,因此输出为2.完整矩阵可以是1000×1000,但是,搜索矩阵大到100×100(可变大小),我需要处理多个搜索矩阵。一排。 因此,这个问题的蛮力非常低效,无法满足几个矩阵的亚秒搜索时间。

有没有人发现垃圾收集调整有用?

我已经阅读了很多关于在Java中调优GC的文章,并且经常想知道有多少人真的使用了一些更高级的function。 我总是尽可能地避免调整,并集中精力编写尽可能简单的代码(Brian Goetz的建议) – 到目前为止,这似乎对我有用。 这些调整策略是否适应VM版本的变化,还是需要不断重新评估? 我使用的一个调整是-server标志。

使用大量内存的Java应用程序。 使用-Xmx?

我有一个在16G的机器上使用大约15G的Java应用程序。 我不知道是否应该设置最大堆大小。 如果设置将jvm吃掉所有ram达到极限然后开始垃圾收集并停止一切,而它通过15G堆对象搅拌? 如果没有,jvm会因为没有使用机器上所有可用的ram而损害性能。 我的具体vm是:Java HotSpot(TM)64位服务器VM(版本1.6.0_03-b05,混合模式)。 谢谢

PatternLayout(log4j)的C,F,L,l和M到底有多慢?

众所周知,PatternLayout的C , F , L , l和M 很慢 : 警告生成调用者位置信息非常慢,应该避免,除非执行速度不是问题。 此外, 本书还提到某些应用程序只能通过更改日志记录格式来获得10%的速度。 但问题是,这些转换字符到底有多慢?

编程语言中的堆栈性能

只是为了好玩,我试图比较使用朴素递归算法计算Fibonacci系列的几种编程语言的堆栈性能。 代码在所有语言中都是相同的,我将发布一个java版本: public class Fib { public static int fib(int n) { if (n < 2) return 1; return fib(n-1) + fib(n-2); } public static void main(String[] args) { System.out.println(fib(Integer.valueOf(args[0]))); } } 好的,重点是使用输入40的算法我得到了这些时间: C: 2.796s Ocaml: 2.372s Python: 106.407s Java: 1.336s C#(mono): 2.956s 它们是在Ubuntu 10.04机器中使用官方存储库中可用的每种语言的版本,在双核英特尔机器上。 我知道像ocaml这样的函数式语言会因为将函数视为一阶公民而减速,并且没有问题来解释CPython的运行时间,因为它是这个测试中唯一的解释语言,但我对java运行印象深刻时间是同一算法的c的一半! 你会把它归因于JIT编译吗? 你会如何解释这些结果? 编辑:谢谢你的回复! 我认识到这不是一个合适的基准(从来没有说过:P)也许我可以做一个更好的基准,并根据我们讨论的内容下次发布给你 编辑2:我使用优化编译器ocamlopt更新了ocaml实现的运行时。 我还在https://github.com/hoheinzollern/fib-test上发布了测试平台。 如果你想要随意添加它:)