Tag: 性能

有没有办法确定理想的线程数?

我正在做一个webcrawler并使用线程下载页面。 我的程序性能的第一个限制因素是带宽,我永远无法下载它可以获得的更多页面。 第二件事是我感兴趣的。 我正在使用线程同时下载许多页面,但是当我创建更multithreading时,会发生更多的处理器共享。 是否有一些度量/方式/类测试来确定什么是理想的线程数,或者如果在一定数量之后,性能不会改变或减少?

Java性能与代码风格:从同一行代码进行多个方法调用

我很好奇是否在同一行代码中打包多个和/或嵌套方法调用对性能更好,这就是为什么有些开发人员这样做,代价是使代码的可读性降低。 例如 //like Set jobParamKeySet = jobParams.keySet(); Iterator jobParamItrtr = jobParamKeySet.iterator(); 也可以写成 //dislike Iterator jobParamItrtr = jobParams.keySet().iterator(); 就个人而言,我讨厌后者,因为它在同一行中进行了多次评估,并且我很难阅读代码。 这就是为什么我试图通过各种方式避免每行代码进行多次评估。 我也不知道jobParams.keySet()返回一个Set ,这让我感到jobParams.keySet() 。 另一个例子是: //dislike Bar.processParameter(Foo.getParameter()); VS //like Parameter param = Foo.getParameter(); Bar.processParameter(param); 前者让我感到有毒和晕眩,因为我喜欢在每行代码中使用简单而干净的评估,当我看到其他人编写的代码时,我就讨厌它。 但是在同一行中打包多个方法调用有什么(性能)好处吗? 编辑:由于@stemm提醒,单行也更难调试

字符串大写 – 更好的方式

什么方法的资本化更好? 矿: char[] charArray = string.toCharArray(); charArray[0] = Character.toUpperCase(charArray[0]); return new String(charArray); 要么 commons lang – StringUtils.capitalize: return new StringBuffer(strLen) .append(Character.toTitleCase(str.charAt(0))) .append(str.substring(1)) .toString(); 我认为我的更好,但我宁愿问。

Lambda vs匿名内部类性能:减少ClassLoader的负载?

我想知道lambdas在Java 8中有多大的好处。我同意有时使用lambdas可能更具可读性,但是它对性能方面有多大影响吗? 或者主要是作为语法糖? 我有时喜欢匿名的内部课程; 当我不经常使用lambda时,我真的会失去很多好处吗? 唯一的?大? 在我看来,性能提升是我们实际上并没有创建类加载器必须在程序开始时加载的类 – 例如创建许multithreading: Thread t = new Thread(new Runnable() { public….. }); 创建Sample$1.class等类。 除此之外, 除了代码的可读性或可维护性等之外 , 还有任何性能或其他隐藏的收益吗? 隐藏在JVM的某个地方? 我见过类似的问题,但大多数都集中在视觉方面; 我对此不感兴趣。 在观看使用Venkat Subramaniam的Java 8 Lambdas Hacking之后,问题出于好奇。

指向Java LinkedList节点的指针

我在O(1)处将n个条目推送到Java LinkedList 。 我想稍后在O(1)删除几个独特的项目。 我想保留一个带有“指针”的数组到LinkedList的唯一节点,以便我以后可以删除它们。 有没有办法在LinkedList或任何其他Java类上做到这一点? 我尝试将迭代器存储到项目中。 所以我可以使用iter.remove() 。 但我明白当时列表中只能有一个迭代器。 我知道一个简单的解决方案可能是我自己实现链接列表。 但我宁愿使用LinkedList或其他已经实现的Java类。

java.lang.reflect.Array的性能

由于我在项目中大量使用对数组的reflection访问,因此我决定比较array[index]与java.lang.reflect.Array.get(array, index) 。 虽然我预计,reflection调用会慢得多,但我惊讶地发现它们的速度要慢10-16倍。 所以我决定编写一个与Array#get大致相同的简单实用程序方法,但是通过强制转换对象而不是使用本机方法接收给定索引处的数组(就像Array#get ): public static Object get(Object array, int index){ Class c = array.getClass(); if (int[].class == c) { return ((int[])array)[index]; } else if (float[].class == c) { return ((float[])array)[index]; } else if (boolean[].class == c) { return ((boolean[])array)[index]; } else if (char[].class == c) { return ((char[])array)[index]; } else if (double[].class […]

编译器内联的getter和setter的概率

我的问题很简单: 问: Java中的编译器会将getter / setter方法内联的几率是多少? (显然没有明确的答案,但其他信息将不胜感激) 额外:我知道编译器(标准和JIT)总是有可能决定内联方法,而当涉及到getter和setter这通常是程序员想要的。 提前致谢。

在java中使用jdbc驱动程序的慢sqlite插入

我刚刚将一百万条记录插入到一​​个包含五列的简单sqlite表中。 使用jdbc驱动程序在java中花了18个小时! 我在python2.5中做了同样的事情,花了不到一分钟。 选择查询的速度似乎很好。 我认为这是jdbc驱动程序的问题。 在java中有没有更快的sqlite3驱动程序? 插入大量行的速度对于我的模式迁移脚本非常重要,如果不需要,我宁愿不必使用外部脚本来执行迁移。 编辑:使用connection.setAutoCommit(false)修复; 感谢Mark Rushakoff向我暗示解决方案:)

实现接口的开销

我的一位同事告诉我,实现接口会引入开销。 这是真的? 我并不关心微观优化; 我只是想知道这需要更深入的细节。

Java方法调用性能

我有这段代码做范围最小查询 。 当t = 100000时,i和j总是在每个输入行中改变,它在Java 8u60中的执行时间约为12秒。 for (int a0 = 0; a0 < t; a0++) { String line = reader.readLine(); String[] ls = line.split(" "); int i = Integer.parseInt(ls[0]); int j = Integer.parseInt(ls[1]); int min = width[i]; for (int k = i + 1; k width[k]) { min = width[k]; } } writer.write(min + “”); […]