Tag: 性能

在Java中检查二维数组中的邻居的更有效方法

嘿所有,对于我的一些大学作业,我发现需要检查二维arrays(网格)中的相邻单元格。 我使用的解决方案是使用exception的一些黑客攻击,我正在寻找一种方法来清理它,而不if像我的一些同学那样加载if语句。 我目前的解决方案是 for ( int row = 0; row < grid.length; row++ ) { for ( int col = 0; col < grid.length; col++ ) { // this section will usually be in a function // checks neighbours of the current "cell" try { for ( int rowMod = -1; rowMod <= 1; rowMod++ […]

Java逐行方法/function分析 – Profiler和/或Eclipse插件

我有一些更大的方法,我试图在Java中进行优化。 我一直在使用jVisualVM来完成我的大部分分析,因为它提供了方法调用热点,是一个很好的起点。 我正在寻找的是一个逐行热点分析器,可以帮助我缩短这么长时间。 我过去使用的繁琐工作只是战略性地放置System.currentTimeMillis()打印,在更极端的情况下使用Java CPUTime (通过JNI完成)。 有一些像英特尔Parallel Amplifier这样的分析器可以与C&Visual Studio一起使用,但Java有什么类似的吗? 这两个选项都有点乏味,那么有什么东西(Eclipse插件或其他)可以进行逐行热点分析吗?

Java性能测量

我正在我的类之间进行一些Java性能比较,并想知道是否有某种Java性能框架可以使编写性能测量代码更容易? 也就是说,我现在正在尝试测量的是,与使用AtomicInteger作为我的“同步器”相比,PseudoRandomUsingSynch.nextInt()中的方法具有“同步”的效果。 所以我试图测量使用3个线程访问同步方法循环10000次的生成随机整数所需的时间。 我相信有更好的方法可以做到这一点。 你能请教我吗? 🙂 public static void main( String [] args ) throws InterruptedException, ExecutionException { PseudoRandomUsingSynch rand1 = new PseudoRandomUsingSynch((int)System.currentTimeMillis()); int n = 3; ExecutorService execService = Executors.newFixedThreadPool(n); long timeBefore = System.currentTimeMillis(); for(int idx=0; idx<100000; ++idx) { Future future = execService.submit(rand1); Future future1 = execService.submit(rand1); Future future2 = execService.submit(rand1); int random1 = […]

哪个更好:让Java进行自动装箱或使用valueOf()

我只是想知道让java autobox说一个整数有什么区别: Integer myInteger = 3; // This will call Integer.valueOf() 或者你的代码是 Integer myInteger = Integer.valueOf(3); 这有什么微优化吗? 我知道第二个更明确,但它也更不必要打字,除了这个有什么区别吗?

这是否意味着Java Math.floor非常慢?

我不是很多Java。 我正在编写一些优化的数学代码,我对我的分析器结果感到震惊。 我的代码收集值,交错数据,然后根据它选择值。 Java运行速度比我的C ++和MATLAB实现慢。 我正在使用javac 1.7.0_05我正在使用Sun / Oracle JDK 1.7.05 存在一个在代码中执行相关任务的floor函数。 有人知道解决这个问题的范式方法吗? 我注意到我的floor()函数是用StrictMath定义的。 是否有类似Java的-ffast-math ? 我期待必须有一种方法可以将地板function更改为更合理的,而无需编写自己的function。 public static double floor(double a) { return StrictMath.floor(a); // default impl. delegates to StrictMath } 编辑 所以有些人建议我尝试演员。 我尝试了这一点,并且壁挂时间绝对没有变化。 private static int flur(float dF) { return (int) dF; } 413742铸造地板function 394675 Math.floor 这些测试没有分析器。 我们努力使用分析器,但运行时间发生了翻天覆地的变化(15分钟以上,所以我退出了)。

-d64交换机对Sun JVM驻留内存使用有什么影响?

我有这个需要内存调整的webapp。 虽然我已经在分析应用程序本身并削减了一些东西,但JVM本身在我们最繁忙的实例上看起来过于臃肿。 (较低的卷实例没有此问题。)详细信息: 平台: RHEL4 64位( Linux 2.6.9-78.0.5.ELsmp #1 SMP x86_64 ) Sun Java 6( Java HotSpot(TM) 64-Bit Server VM (build 10.0-b23, mixed mode) ) 在startup.sh使用-d64 Tomcat 6 我的webapp目前有一些代码,在生产中需要运行64位的好处。 我观察到,经过一段时间(一周)后,JVM驻留内存大小(如上图所示)是我的-Xmx设置大小的三倍 。 非堆内存大小等都是相对微不足道的,只是堆大小的单位数百分比 只有一段代码需要64位的地址空间 如果我可以重构64位JVM的需要,并删除-d64开关,那会不会使JVM的常驻内存占用更小? 换一种说法… -d64交换机对Sun JVM驻留内存使用有何影响(如果有)?

哪个更好/更有效:检查错误值或捕获Java中的exception

哪个在Java中效率更高:检查错误值以防止exception或让exception发生并捕获它们? 以下是两个示例代码块,用于说明这种差异: void doSomething(type value1) { ResultType result = genericError; if (value1 == badvalue || value1 == badvalue2 || …) { result = specificError; } else { DoSomeActionThatFailsIfValue1IsBad(value1); // … result = success; } callback(result); } 与 void doSomething(type value1) { ResultType result = genericError; try { DoSomeActionThatFailsIfValue1IsBad(value1); // … result = success; } catch […]

调整Tomcat内存和CPU消耗

我有一个Java Web应用程序,它适用于文件约定。 我使用Tomcat 6作为我的servlet容器。 当提交了许多请求时,Tomcat变得非常渴望内存。 我想知道如何微调tomcat以减少内存消耗。 我也在考虑更改我的servlet容器。 你有什么建议?

增强的循环性能比传统的索引查找更差?

我刚刚看到这个看似无害的评论 ,对ArrayList和原始String数组进行基准测试。 它来自几年前,但OP写道 我注意到使用String s:stringsList比使用旧式for循环访问列表慢约50%。 去搞清楚… 没有人在原帖中评论它,测试看起来有点可疑(太短不准确),但是当我读到它时,我几乎从椅子上掉了下来。 我从来没有对“传统”的循环进行基准测试,但是我正在开发一个使用增强循环对ArrayList实例进行数亿次迭代的项目,所以这是我关注的问题。 我将在这里做一些基准测试并发布我的发现,但这显然是我的一个大问题。 我可以在网上找到关于相对性能的宝贵的小信息,除了一些随便提到的ArrayLists的增强循环在Android下运行速度慢得多 。 有没有人经历过这个? 这种性能差距是否仍然存在? 我会在这里发表我的发现,但读到它时非常惊讶。 我怀疑如果这个性能差距确实存在,它已经在更现代的VM中得到修复,但我想我现在必须做一些测试并确认。 更新:我对我的代码进行了一些更改,但已经怀疑其他人已经指出的内容:确定增强的for循环速度较慢,但​​在非常简单的紧密循环之外,成本应该是成本的一​​小部分。循环的逻辑。 在我的情况下,即使我使用增强型循环迭代非常大的字符串列表,我在循环中的逻辑也足够复杂,甚至在切换到基于索引的循环之后我甚至无法测量差异。 TL; DR:增强循环确实比传统的基于索引的循环更慢; 但对于大多数应用来说,差异应该可以忽略不计。

如果它没有在代码中修改,我应该声明一个java字段’final’吗?

我的问题主要是关于表现。 编译器知道更好,例如,在对象实例化之后不修改某个变量。 那么,为什么要打扰决赛呢? 我认为可能会有许多结构/逻辑原因,但从性能的角度来看呢? 有关系吗? 谢谢,