Tag: 优化

替换字符串中的许多字符的有效方法是什么?

Java中的字符串处理是我努力学习做得好的事情。 目前我想接受一个字符串并替换我找到的任何字符。 这是我目前效率低下的(有点愚蠢的IMO)function。 它写的只是工作。 public String convertWord(String word) { return word.toLowerCase().replace(‘á’, ‘a’) .replace(‘é’, ‘e’) .replace(‘í’, ‘i’) .replace(‘ú’, ‘u’) .replace(‘ý’, ‘y’) .replace(‘ð’, ‘d’) .replace(‘ó’, ‘o’) .replace(‘ö’, ‘o’) .replaceAll(“[-]”, “”) .replaceAll(“[.]”, “”) .replaceAll(“[/]”, “”) .replaceAll(“[æ]”, “ae”) .replaceAll(“[þ]”, “th”); } 我运行了1.000.000次,耗时8182ms。 那么我应该如何进行更改此function以提高效率呢? 解决方案: 将函数转换为此函数 public String convertWord(String word) { StringBuilder sb = new StringBuilder(); char[] charArr = word.toLowerCase().toCharArray(); […]

Arrays.asList的性能

使用Arrays.asList转换静态对象数组的成本是多少? 假设对象数组有N个项,那么它只是一个O(N)算法,其中所有项都是通过引用复制的,还是仅仅是原始数组放在List外观后面的外观?

什么时候java比c ++快(或者什么时候JIT更快然后预编译)?

可能重复: JIT编译器与离线编译器 我听说在某些情况下,由于JIT优化,Java程序或java程序的某些部分能够比C ++(或其他预编译代码)中的“相同”代码执行得更快。 这是因为编译器能够确定某些变量的范围,避免一些条件并在运行时拉出类似的技巧。 你能给出一个(或更好 – 一些)例子吗? 并且可能概述了编译器能够优化字节码超出预编译代码可能性的确切条件? 注意:这个问题不是将Java与C ++进行比较。 它关于JIT编译的可能性。 请不要燃烧。 我也不知道有任何重复。 如果你是的话请指出来。

Java:有效地计算大文件的SHA-256哈希值

我需要计算一个大文件(或其中一部分)的SHA-256哈希值。 我的实现工作正常,但它比C ++的CryptoPP计算慢得多(25分钟与10分钟~30GB文件)。 我需要的是C ++和Java中类似的执行时间,因此哈希几乎可以在同一时间准备就绪。 我也尝试过Bouncy Castle实现,但它给了我相同的结果。 这是我如何计算哈希: int buff = 16384; try { RandomAccessFile file = new RandomAccessFile(“T:\\someLargeFile.m2v”, “r”); long startTime = System.nanoTime(); MessageDigest hashSum = MessageDigest.getInstance(“SHA-256”); byte[] buffer = new byte[buff]; byte[] partialHash = null; long read = 0; // calculate the hash of the hole file for the test long offset = […]

大型列表的正则表达式优化

我正在比较两个字符串列表以找到可能的匹配。 例: public class Tester { public static void main(String[] args) { List test = new ArrayList(); List test2 = new ArrayList(); test.add(“3H0875AAAA0012”); test.add(“3H0875AABB0018”); test.add(“3H0875AAAC0010”); test2.add(“3H0875AA”); for(String s2: test2){ for (String s: test){ if (s.matches(“.*” + s2 + “.*”)){ System.out.println(“Match”); } } } } } 基本上对于test2每个字符串,我想看看test中是否有任何完全或部分包含test2字符串。 上面代码的输出应该是: Match Match Match 但是,在我的实际情况中,我在测试中有大约225K个字符串,在test2中有大约5K个字符串。 这个比较需要太长的过程,并想看看是否有可能优化比较。 分析test2中的前1.5K项需要大约10分钟。 因此完成比较至少需要30到40分钟。 提前致谢

通过查看内置类的编译器代码来编写优化代码的示例

这可能不是一个实际问题,但我只是为了获得一些有价值的附加知识而提出这个问题。 我曾经多次遇到这种情况(如阅读许多文章和博客),一旦一个人成为特定编程语言的专家,他们就会倾向于通过查看最微小的细节是如何实现的,在他们构建的任何应用程序中优化代码通过查看用于开发应用程序的每个内置类的编译器代码。 但我没有看到这种情况的例子。 任何人都可以建议任何或给一个片段。 我非常擅长Java,所以如果Java中存在任何这样的优化示例,请任何人都可以编写代码片段。 如果不是我不介意任何前卫。 语言作为问题几乎涵盖了目前使用的语言。

如何在java apache数学中使用SimplexSolver或SimplexOptimizer?

我正在尝试使用apache commons数学库版本3.5+来解决优化问题。 基本上,我正在尝试将(gamma)分布拟合到某些数据点。 我似乎找不到任何关于如何使用新的(版本3.5)优化工具(如SimplexSolver,SimplexOptimizer或OptimizationData)的简单示例来解决一个简单的优化问题。 之前已经提出了类似的问题,但所有答案似乎都是针对旧版本的apache数学 – 在3.5版本中进行了重组,并且我找不到任何示例代码。 有没有人有一个工作示例如何使用新的优化器或求解器? 我对SimplexOptimizer最感兴趣,但此时任何事情都会有用。

Hibernate的批量获取算法如何工作?

我在“Manning-Java Persistence with Hibernate”中找到了批量获取算法的描述: 什么是真正的批量获取算法? (…)想象一下批量大小为20,总共119个未初始化的代理必须分批加载。 在启动时,Hibernate读取映射元数据并在内部创建11个批处理加载器。 每个加载器知道它可以初始化多少个代理:20,10,9,8,7,6,5,4,3,2,1。目标是最小化加载器创建的内存消耗并创建足够的每个加载器可以生成可能的批量提取。 另一个目标是显着减少SQL SELECT的数量。 要初始化119个代理,Hibernate会执行7个批处理(你可能预计会有6个,因为6 x 20> 119)。 应用的批处理加载程序是Hibernate自动选择的五倍20倍,一倍10倍和一倍9倍。 但我仍然不明白它是如何工作的。 为什么11批装载机? 为什么批量加载器可以初始化:20,10,9,8,7,6,5,4,3,2,1个代理? 如果有人可以提出一步一步的算法…… 🙂

如何在优化后看到HotSpot生成的代码?

我想更好地了解HotSpot在运行时可能为我的Java代码生成的优化。 有没有办法看到HotSpot运行一段时间后使用的优化代码?

在Swing应用程序启动期间首次调用JFrame构造函数需要很长时间(因为java.awt.Window())

我正在尝试使用Java Swing构建一个简单,轻量级且响应迅速的应用程序。 但是,当它启动时,在窗口(JFrame)出现之前会有明显的延迟(> 500ms)。 我已将其跟踪到java.awt.Window类的构造函数,该类是JFrame的祖先。 奇怪的是,构造函数只对第一次调用很慢。 如果我创建了多个JFrame对象,则构造函数在第一个对象上花费的时间约为600毫秒,但对于后续对象,通常测量为0毫秒。 这是一个简单的例子,在我的系统中,显示了第一个构造函数调用的显着延迟,但不是第二个: public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { long start; start = System.currentTimeMillis(); JFrame frame1 = new JFrame(); System.out.println((System.currentTimeMillis() – start) + ” for first JFrame.”); start = System.currentTimeMillis(); JFrame frame2 = new JFrame(); System.out.println((System.currentTimeMillis() – start) + ” for second JFrame.”); […]