Tag: 性能

Javaarrays效率

我对行动机制并不是100%肯定所以我决定在此发布以进一步澄清。 我正在做一个应该用Java处理大量数据的项目(它必须是Java)。 我希望它尽可能高效。 有效率我的意思是内存和速度计算应首先出现,可读性应该排在第二位。 现在我有两种方法来存储我的数据:创建一个MyObject数组 1) MyObject[][] V = new MyObject[m][n] 或者创建两个int数组: 2) int[][] V = new int[m][n] 3) int[][] P = new int[m][n] 显然, MyObject包含至少两个字段和一些方法。 现在我注意到,在循环遍历MyObject数组以分配值时,我必须调用new ,否则我会得到一个空指针exception。 这意味着第1行中的new是不够的。 考虑到数组也是Java中的对象,为了论证,这是一个比P[i][j]=n更昂贵的操作吗?

在Java方法性能中使用final关键字?

方法参数中的use final是否允许编译器或运行时环境更快地工作? 例如,如果您有一个变量要传递给您知道不会被修改并按原样使用的方法,那么将它声明为final是否更有效? 示例:第一种方法应该比第二种方法更快 public int isLargerAfterTripledFaster(int num, final int limit) { num *= 3; return (num > limit); } public int isLargerAfterTripled(int num, int limit) { num *= 3; return (num > limit); } 如果我可以肯定我永远不想在这里传递一个可修改的变量,我应该采用这种方法吗?

我的JBoss服务器在Linux上遇到100%的SYS CPU; 什么可以导致这个?

我们一直在调试这个JBoss服务器问题。 经过大约10个小时的工作,服务器进入100%CPU恐慌攻击并停止。 在此期间,您无法运行任何新程序,因此您甚至无法使用kill -quit来获取堆栈跟踪。 这些高100%SYS CPU负载持续10-20秒,每隔几分钟重复一次。 我们已经工作了很长一段时间。 我们怀疑它与GC有关,但无法通过较小的程序确认。 我们使用-client和ParNew GC在i386 32位,RHEL5和Java 1.5.0_10上运行。 以下是我们迄今为止所尝试的内容: 我们限制了CPU亲和力,因此我们可以在高负载点击时实际使用服务器。 随着strace我们看到一个无限循环的SIGSEGV然后sig返回。 我们尝试使用Java程序重现这一点。 确实,SYS CPU%使用WeakHashMap或访问空指针时爬升得很高。 问题是fillStackTrace占用了大量用户CPU%,这就是我们从未达到过100%SYS CPU的原因。 我们知道,经过10个小时的压力,GC会变得疯狂,完整的GC有时需要5秒钟。 所以我们假设它与记忆有关。 在此期间的jstack显示所有线程都被阻止。 pstack在那段时间里偶尔出现MarkSweep堆栈跟踪,所以我们也不能确定这一点。 发送SIGQUIT没有任何结果:Java在SYS%加载周期结束后转储了堆栈跟踪。 我们现在尝试用一小段代码重现这个问题,这样我们就可以问Sun. 如果您知道是什么原因造成的,请告诉我们。 我们对想法持开放态度,我们无能为力,欢迎任何想法:) 谢谢你的时间。

正则表达式的最佳实践VS纯粹的迭代

我想知道是否有任何关于何时使用正则表达式VS “string”.contains(“anotherString”)和/或其他String API调用的一般指导原则? 虽然上面给出了.contains()决定是微不足道的(如果你能在一次调用中做到这一点,为什么还要使用正则表达式),现实生活带来了更复杂的选择。 例如,做两个.contains()调用还是单个正则表达式更好? 我的经验法则是始终使用正则表达式,除非可以用单个API调用替换它。 这可以防止代码膨胀,但从代码可读性的角度来看可能不太好,特别是如果正则表达式趋于变大。 另一个经常被忽视的论点是表现。 我怎么知道这个正则表达式需要多少次迭代(如“Big O”)? 它会比纯粹的迭代更快吗? 不知何故,每个人都认为,一旦正则表达式看起来比5语句更短,它必须更快。 但情况总是这样吗? 如果无法事先预编译正则表达式,这尤其重要。

什么时候应该而且不应该为了速度/性能而脱离OOP?

在Android的开发者文章中,Google声明你应该通常使用getter和setter声明公共变量而不是私有变量来增强嵌入式设备的性能(我认为函数调用比写入地址更昂贵)。 我想知道 – 在多大程度上应该牺牲性能来坚持OOP范式? 在其他情况下,优化是否意味着脱离“良好”的编码实践?

如何在Java中以高性能显示许多SVG

我想要的是 我的目标是能够在Java中的单个绘图区域上显示大量SVG图像,每个图像都有自己的平移/旋转/缩放值。 我正在寻找最简单的解决方案,可选择甚至使用OpenGL来加快速度。 我试过的 我最初的天真的方法是使用SVGSalamander直接在JPanel上绘制,但性能是可悲的。 我四处寻找,并了解到我应该做一些事情,比如手动将每个SVG转换为用createCompatibleImage创建的BufferedImage,然后进行我想要的转换,然后使用双缓冲绘制它。 我在这里遇到了一些麻烦,在我继续之前,我试图寻找框架来简化事情。 我看到了什么 我对可用的选项感到有些不知所措,这就是为什么我转向SO寻求帮助的原因。 我看过: 开罗 (可能是格利茨 ?) Libart – 不确定这是否真的支持SVG 通风柜 光滑 – 看起来很有希望,但有点矫枉过正 但是无法决定什么对我来说最适合开始工作,我希望有人在这里做任何类似事情的经验。

年轻的GC导致Metaspace增加,而不是Old Gen

从JDK7迁移到JDK 8时,我开始看到频繁的Full GC(具有更高的GC延迟)。 在分析了gc之后,发现在年轻的GC之后,元空间的使用增加了,而旧的使用率仍然相同。 我已将最大元空间大小(等于JDK7中的Perm Gen)设置为256MB。 当使用率达到210 MB左右时,将触发完整的GC。 我已经尝试将元空间最大大小设置为512MB,然后我也看到Metaspace Threshold导致Full GC。 为什么Young GC会导致元空间大小增长? JDK8引发了GC延迟。 使用JDK7,GC延迟通常低于100毫秒,而使用JDK8的全GC启动时间为800-1000毫秒。 这会影响我的应用程序性能。 我正在使用并行GC算法。 我怀疑在metaspace上的GC比Old gen GC要耗费更多时间。 有关为JDK8调优JVM的任何建议都将非常有用。 年轻的GC: S0 S1 EOM CCS YGC GCT FGC FGCT GCT LGCC GCC 0.00 40.28 99.78 21.95 56.28 – 149 6.647 2 3.276 9.924 Allocation Failure No GC 54.17 0.00 0.66 21.95 57.63 – 150 […]

如何停止在CollapsingToolbarLayout上滚动,以便它不会完全崩溃

您好Everone能否请您建议如何阻止它。请查看以下屏幕截图。 向上滚动后,它应该从TOP工具栏最小200dp下方停止

有没有理由不总是使用AtomicInteger作为数据成员?

在像Android这样的multithreading环境中,一个简单的int变量可能被多个线程操纵,在哪种情况下仍然有理由使用int作为数据成员? 作为局部变量的int ,仅限于具有独占访问权限的方法的范围(因此开始和完成修改它总是在同一个线程中),在性能方面完全有意义。 但作为数据成员,即使由访问器包装,它也可能遇到众所周知的并发交错修改问题。 所以看起来“玩得安全”可以全面使用AtomicInteger 。 但这似乎非常低效。 你能带一个线程安全的int数据成员用法的例子吗?

如何在QNX6下提高Eclipse IDE的性能

我们在VMWare环境中通过QNX6运行Eclipse,速度非常慢。 Eclipse的启动方式如下: /usr/qnx630/host/qnx6/x86/usr/qde/eclipse/eclipse -data /root//workspace /usr/qnx630/host/qnx6/x86/usr/qde/eclipse/jre/bin/pvm -pri 13 -ts 4 -gs 4 -gcperiod 500 -cs 512000 -nojit -numregs 64 -maxmem 256M -Djava.version -classpath /usr/qnx630/host/qnx6/x86/usr/qde/eclipse/startup.jar org.eclipse.core.launcher.Main -os qnx -ws photon -arch x86 -showsplash /usr/qnx630/host/qnx6/x86/usr/qde/eclipse/eclipse -showsplash 600 -exitdata /usr/qnx630/host/qnx6/x86/usr/qde/eclipse/eclipse -exitdata /tmp/eclipse_25b034 -data /root//workspace 有什么想法让它更快? 就像关闭一些function,调整gc一样,一般的想法不是QNX或VMWare特有的……