Tag: 优化

快速Java优化问题

Eclipse编译器会自动将乘法乘以2的幂来转换为位移,还是应该手动执行? 谢谢您的帮助。

Java是否通过2的幂来优化除法?

Java编译器或 JIT编译器是否通过2的恒定功率优化除法或乘法到位移位? 例如,以下两个语句是否被优化为相同? int median = start + (end – start) >>> 1; int median = start + (end – start) / 2; (基本上这个问题,但对于Java)

instanceof运算符是否会产生大量开销? 为什么?

我的项目中有一位同事,他非常反对使用instanceof运算符,因为它“产生了很多开销”,原因是什么? 这是真的吗? 有没有其他方法来检查对象的类型而不是使用它? 因为我觉得它在某些场合非常有用。

arrays访问复杂性

在Java中,我需要在代码中多次访问array1[index] 。 即使对于超大型arrays,我是否可以假设每个单一arrays访问需要恒定时间? 这在语言或底层架构之间有区别吗?

如何优化solr指数

如何优化solr指数。 我想优化我的solr索引,我尝试在solrconfig.xml中更改它被索引,但我想知道如何validation它们是否已经过优化以及索引优化涉及哪些内容。

有没有办法保存下一次运行的JAVA JIT信息,这样我就不必每天都热身了?

我有一个每天运行的JAVA进程,在JIT完全优化之前需要大约1,000或2,000次点击。 我想要做的是保存JIT信息,以便第二天它可以在优化状态下启动。 看起来这应该是可能的,但我还没有找到任何方法。

现代JVM是否优化了简单的内联匿名类分配?

我今天得到了一个代码审查备注,将这个匿名类提取到一个字段中,以避免一遍又一遍地分配它: Collections.transform(new Function(){ Bar apply(Foo foo) { // do some simple local transform of foo into a Bar. } }); 我回答说“没关系,JVM优化它”。 虽然我知道这个“优化”不会以任何方式影响性能,但我认为让内联代码可访问的附加值是值得的,我很好奇我是否对JVM优化是正确的。 所以,我的问题是 – 它提议的重构绝对是一个无操作 ,因为JVM无论如何都会优化它,或者这里有一些微小的理论性能增益?

使用BoneCP:处理池中的连接

我刚刚开始使用BoneCP,这是我第一次使用连接池。 关于我应该如何使用它,我有点困惑。 目前我将BoneCP对象保存为静态变量,因此我可以在不同的连接之间使用它。 当我完成连接后,我用connection.close()关闭它。 我应该这样做,还是不应该关闭它以使它能够被池重用? 这是我当前获得连接的实现: private static BoneCP connectionPool; public Connection getConnection() throws SQLException { if (connectionPool == null) { initPool(); } return connectionPool.getConnection(); } private void initPool() throws SQLException { BoneCPConfig config = new BoneCPConfig(); config.setJdbcUrl(DB_URL); config.setUsername(DB_USERNAME); config.setPassword(DB_PASSWORD); config.setMinConnectionsPerPartition(5); config.setMaxConnectionsPerPartition(10); config.setPartitionCount(1); connectionPool = new BoneCP(config); } 这看起来是正确的还是我误解了我应该如何使用BoneCP?

Java:优化hashset以进行大规模重复检测

我正在处理一个项目,我正在处理很多推文; 我的目标是在处理它们时删除重复项。 我有推文ID,其格式为”166471306949304320″ 我一直在使用HashSet ,它可以正常工作一段时间。 但到了大约1000万件物品的时候,我已经陷入困境并最终得到GC错误,大概是从重新开始。 我试着定义一个更好的尺寸/负载 tweetids = new HashSet(220000,0.80F); 这让它变得更远,但仍然非常缓慢(大约1000万,它需要花费3倍的时间来处理)。 我该如何优化呢? 鉴于我已经大致知道在结尾集合中应该有多少项目(在这种情况下,大约20-2200万)我应该创建一个只重复两次或三次的HashSet,或者这样的开销是多少?设置了太多的时间罚款? 如果我没有使用String,或者我定义了一个不同的HashCode函数(在这种情况下是String的特定实例,我不知道该怎么做),事情会更好吗? 这部分实现代码如下。 tweetids = new HashSet(220000,0.80F); // in constructor duplicates = 0; … // In loop: For(each tweet) String twid = (String) tweet_twitter_data.get(“id”); // Check that we have not processed this tweet already if (!(tweetids.add(twid))){ duplicates++; continue; } 解 感谢您的推荐,我解决了这个问题。 问题是哈希表示所需的内存量; […]

动态规划和背包应用

我正在研究动态编程,并希望解决以下问题,可以在http://www.cs.berkeley.edu/~vazirani/algorithms/chap6.pdf找到: 给你一块尺寸为X×Y的矩形布,其中X和Y是正整数,以及可以使用布制作的n个产品列表。 对于[1,n]中的每个产品,您知道需要一个尺寸为ai by bi的矩形布料,并且该产品的最终销售价格为ci。 假设ai,bi和ci都是正整数。 你有一台机器可以将任何矩形布块水平或垂直切成两块。 设计一种算法,找到切割X×Y布料的最佳策略,以便由最终产品制成的产品给出最大的销售价格总和。 您可以根据需要自由制作给定产品的副本,如果需要,可以不制作任何副本。 (来自Dasgupta,Papadimitriou和Vazirani的算法。) 看起来我们有一种二维背包问题,但我认为通过将权重视为矩形区域,可以用传统的背包算法解决它。 这看起来像是一种合理的方法吗? 这是我正在学习的课程的编程作业,所以请仅包括概念性讨论和/或伪代码来说明想法。