Tag: 性能

URI.create()vs new URI()

可以通过两种方式创建uri : URI uri = new URI(“https://www.google.com/”); 要么, URI uri = URI.create(“https://www.google.com/”); 我想知道哪个是更好的做法。 我没有注意到任何性能差异,我已经阅读了文档,但是有点难以理解。 对此有任何见解表示赞赏。

比较字符串的最快方法(文字和数字)

我有一个与字符串比较相关的性能问题(在Java中)。 我正在开发一个需要对一个巨大的列表进行排序的项目(Eclipse中的TableViewer)。 无论如何,我已经确定了要比较的字符串compareTo()的调用瓶颈。 有没有办法优化字符串比较的性能? 我搜索并用谷歌搜索无济于事…… 由于该项目严格限于Win32环境,我认为也许可以利用它… 任何建议将不胜感激。 编辑:我忘了提到我需要数字比较和字符串的字面比较。 EDIT2:目标本质上是加速用户界面,因为每次单击表头以执行排序时等待几秒是不可接受的。 我正在考虑以某种方式缓存值来加速比较。 由于字符串非常静态,我认为这是可能的。 编辑3:我知道很多人都被try() – catch()事情所困扰。 实际上这不是一个问题,因为即使我删除该代码并只执行catch-block(单个compareTo()),它仍然以与原始代码几乎相同的速度执行。 但是,如果我也注释掉compareTo(); 只留下比较function的开销(获得标签等),它快速闪电。 所以我仍然需要一种比较字符串的更好方法。 通过缓存或做一些其他魔术。 不幸的是,不可能改变排序算法 – 但我怀疑它是那么慢,因为它成功地快速排序纯整数。 澄清: compare函数是作为TableViewer框架的一部分实现的,用于执行排序操作,这意味着我没有实现特定的排序算法,而是由SWT / JFace实现。 我只是实现了比较function。 更有趣的是,用于排序双精度的代码比字符串比较更快 。 使用只有数字而不是实际的文字字符串对列进行排序更快….这使我得出结论,在compareTo()方法中发生了一些可疑的事情…… 这是该function的核心: // e1Label and e2Label is Strings to be compared // // Be smart about the comparison and use non-lexical comparison if // possible (ie […]

如何处理不同计算机之间的Java 2D性能变化?

我一直在Windows上用Java设计一款纸牌游戏。 它在我的笔记本电脑和其他一些系统上运行得非常好,但在许多其他系统(甚至是Mac和Windows上的一些新系统)上,动画速度非常慢。 我发现Java用户界面工具包是迄今为止最好的资源,但未能取得重大改进。 我正在使用AWT / Swing库。 题: 看看我的游戏 ,(<1.5Mb),在某些计算机(类似规格)上,性能似乎远远低于笔记本电脑上的性能? 整个应用程序是事件驱动的,我已经完成了大部分优化,我认为在实现的情况下可以完成。 我感觉它与记忆有关。 我创建(兼容),然后在开始时将我的所有图像存储到一个数组中,然后在那里引用它们。 注意:我决定制作这个游戏,以便我可以学习和练习一些新的想法,所以我不只是想分享它 – 我真的很想知道这里发生了什么。

Hibernate参数化sql查询慢和活动的oracle会话

关于Oracle数据库的hibernate查询,我一直在苦苦挣扎几天。 这样的东西用于将记录提供给网格。 SELECT fields FROM tables and JoinedTables WHERE Field1 >= :value1 AND Field2 = :value2 AND Field3 = :value3 Order By MaintTable.Id Desc 在Spring Java + Hibernate 4.2方法中使用这种方法。 SQLQuery query = (SQLQuery) session.createSQLQuery(querySql) .addEntity(CertificateViewEnt.class) .setParameter(“value1”, firstCertificateRecordDate) .setParameter(“value2”, certType.toUpperCase()) .setParameter(“value3”, deleted? 1:0); 每个过滤的字段都被正确编入索引并在Maintable.Id Descendent上创建一个函数索引以提高性能。 起初我以为是会话/连接池没有被正确管理,所以我改为StatelessSession并添加了这个session.close(): query.setCacheable(false) .setTimeout(30) .setReadOnly(true); … … //Pagination query.setMaxResults(rows); query.setFirstResult(HelperMethod(page, rows)); result […]

处理大型Java项目中的内存泄漏的最佳实践?

在我参与的几乎所有大型Java项目中,我都注意到应用程序的服务质量随着容器的正常运行时间而降低。 这很可能是由于代码中的内存泄漏造成的。 解决此问题的正确方法显然是追溯问题的根本原因并修复代码中的泄漏。 解决问题的快速而简单的方法就是重新启动Tomcat(或者您正在使用的任何servlet容器)。 这是我的三个问题: 假设您选择通过跟踪问题的根本原因(内存泄漏)来解决问题,您将如何收集数据以放大问题? 假设您通过简单地重新启动容器来选择快速而肮脏的加速方式,您将如何收集数据以选择最佳重启周期? 您是否能够在很长一段时间内部署和运行项目而无需重新启动servlet容器以重新获得快速? 或偶尔的servlet重新启动一个人必须接受的东西?

在Java中检测偶数的最有效方法是什么?

确定一个数字甚至是使用Java的最有效方法是什么?为什么? 它会使用模数或减法,还是其他一些我没想过的方式? 有人想象我可以确定这是一个简单的测试课 – 而且我可以 – 但这真的无法解释原因,是吗? 我没有做一些疯狂的裤子性能调整,以实现更快处理许多项目的一些崇高目标。 但我很好奇一种方法是否应该优先于另一种方法作为常规做法。 同样地,我们不会使用&代替&& ,为什么在使用&时使用% ?

是否有在微码中运行Java的CPU?

Java是一种制作精良的OO语言,但我注意到的第一件事是它有多慢(与C ++相比)。 这可能是因为它必须通过另一层转换(VM)而不是直接在CPU的本机微码中运行。 我的问题:您是否知道有任何尝试创建特定于Java的CPU,这些CPU本身运行Java而不需要软件实现的VM?

高性能应用程序中的C / C ++与Java / C#

我的问题是关于Java与编译代码的性能,例如高性能数值应用程序中的C ++ / fortran / assembly。 我知道这是一个有争议的话题,但我正在寻找具体的答案/例子。 社区维基。 我以前曾问过类似的问题,但我认为我把它广泛地提出来并没有得到我想要的答案。 双精度矩阵矩阵乘法,通常称为blas库中的dgemm,能够实现接近100%的峰值CPU性能(就每秒浮动运算而言)。 有几个因素可以实现这种表现: 缓存阻塞,实现最大内存局部性 循环展开以最小化控制开销 矢量指令,例如SSE 内存预取 保证没有内存别名 我已经看到很多使用汇编,C ++,fortran,Atlas,供应商BLAS的基准测试(典型情况是维度512及以上的矩阵)。 另一方面,我听说过Java等原理字节编译语言/实现可以快速或几乎与机器编译语言一样快。 但是我还没有看到明确的基准测试表明它是如此。 相反,似乎(根据我自己的研究)字节编译语言要慢得多。 你有没有很好的Java / C#矩阵矩阵乘法基准? 实时编译器(实际实现,而不是假设)能够产生满足我列出的点的指令吗? 谢谢 关于性能:每个CPU都具有峰值性能,具体取决于处理器每秒可执行的指令数量。 例如,现代2 ghz Intel CPU可以实现80亿双精度加/秒一秒,从而产生8 gflops的峰值性能。 矩阵矩阵乘法是能够在每秒操作次数方面实现几乎完全性能的算法之一,主要原因是计算内存操作的比率更高(N^3/N^2) 。 数字我对N > 500的订单感兴趣。 关于实现:阻塞等更高级别的细节是在源代码级别完成的。 较低级别的优化由编译器处理,可能还有关于对齐/别名的编译器提示。 字节编译的实现也可以使用块方法编写,因此原则上用于体面实现的源代码细节将非常相似。

LinkedBlockingQueue的Java性能问题

这是我在stackoverflow上的第一篇文章…我希望有人可以帮助我 我使用Java 6 LinkedBlockingQueue进行了很大的性能回归。 在第一个线程中,我生成了一些我推入队列的对象。在第二个线程中,我将这些对象拉出来。 当频繁调用LinkedBlockingQueue的take()方法时, take()发生性能回归。 我监控整个程序, take()方法总体上take()了最多的时间。 吞吐量从~58Mb / s到0.9Mb / s …… 队列弹出并使用此类中的静态方法调用方法 public class C_myMessageQueue { private static final LinkedBlockingQueue x_queue = new LinkedBlockingQueue( 50000 ); /** * @param message * @throws InterruptedException * @throws NullPointerException */ public static void addMyMessage( C_myMessageObject message ) throws InterruptedException, NullPointerException { x_queue.put( message ); […]

合成访问器方法警告

我在eclipse中做了一些新的警告设置。 有了这些新设置,我面临一个奇怪的警告。 阅读后我知道它是什么,但找不到删除它的方法。 这是我的示例代码问题 public class Test { private String testString; public void performAction() { new Thread( new Runnable() { @Override public void run() { testString = “initialize”; // ** } }); } } 带* *的行在eclipse中给我一个警告 Read access to enclosing field Test.testString is emulated by a synthetic accessor method. Increasing its visibility will improve your […]