Tag: 性能

Java方面的同步和性能

我刚刚意识到我需要在一个方面同步大量的数据收集代码,但性能是一个真正的问题。 如果性能下降太多,我的工具将被抛弃。 我将单独编写int和long,以及各种数组,ArrayLists和Maps。 将有一个应用程序的多个线程将进行将由我的方面拾取的函数调用。 我应该注意哪些事情会对性能产生负面影响? 什么代码模式更有效? 特别是我有一种方法可以调用许多其他数据记录方法: void foo() { bar(); woz(); … } 这些方法主要是添加方面字段的递增 void bar() { f++; // f is a field of the aspect for (int i = 0; i < ary.length; i++) { // get some values from aspect point cut if (some condiction) { ary[i] += someValue; // ary a […]

现代Java编译器/ JVM内联函数/方法是否完全从一个地方调用?

我发现C ++编译器这样做但我想知道Java编译器是否也这样做,因为在那个答案中他们说添加静态会这样做但是静态在java和C ++中是不同的。 在我的情况下,性能很重要,因为我使用的函数在游戏循环中每帧只调用一次,而在其他地方调用,以使其更具可读性 在我的代码中,我设置类似于此,除了更多的调用 while(running) { update(); sync(); } 然后update(),render()会调用更多调用其他方法的方法 private final void update() { switch(gameState) { case 0: updateMainMenu(); renderMainMenu(); break; case 1: updateInGame(); renderInGame(); break; //and so on } } private final void updateInGame() { updatePlayerData(); updateDayCycle(); //and so on } private final void updatePlayerData() { updateLocation(); updateHealth(); //and so on } […]

JNA库比机器人类的屏幕截图慢?

由于Robot.createScreenCaputure()方法很慢,我决定使用本机库。 我搜索并找到了这个论坛 ,找到了一个使用JNA Library的特定代码snipplet 。 这是一个旧版本,所以我重写了代码: import java.awt.Rectangle; import java.awt.image.BufferedImage; import java.awt.image.ColorModel; import java.awt.image.DataBuffer; import java.awt.image.DataBufferInt; import java.awt.image.DataBufferUShort; import java.awt.image.DirectColorModel; import java.awt.image.Raster; import java.awt.image.WritableRaster; import com.sun.jna.Native; import com.sun.jna.win32.W32APIOptions; import com.sun.jna.platform.win32.WinDef; import com.sun.jna.platform.win32.WinNT; import com.sun.jna.platform.win32.WinGDI; public class JNAScreenShot { public static BufferedImage getScreenshot(Rectangle bounds) { WinDef.HDC windowDC = GDI.GetDC(USER.GetDesktopWindow()); WinDef.HBITMAP outputBitmap = GDI.CreateCompatibleBitmap(windowDC, bounds.width, bounds.height); try […]

Java 8流串行和并行性能

在我的机器上,下面的程序打印: OptionalLong[134043] PARALLEL took 127869 ms OptionalLong[134043] SERIAL took 60594 ms 我不清楚为什么串行执行程序比并行执行程序要快。 我已经在一个相对安静的8gb盒子上给了两个程序-Xms2g -Xmx2g 。 有人可以澄清最新情况吗? import java.util.stream.LongStream; import java.util.stream.LongStream.Builder; public class Problem47 { public static void main(String[] args) { final long startTime = System.currentTimeMillis(); System.out.println(LongStream.iterate(1, n -> n + 1).parallel().limit(1000000).filter(n -> fourConsecutives(n)).findFirst()); final long endTime = System.currentTimeMillis(); System.out.println(” PARALLEL took ” +(endTime – startTime) […]

ThreadLocal HashMap vs ConcurrentHashMap用于线程安全的未绑定缓存

我正在创建一个具有以下特征的memoization缓存: 高速缓存未命中将导致计算和存储条目 这个计算非常昂贵 这种计算是幂等的 无界限(条目从未删除)因为: 输入将导致最多500个条目 每个存储的条目都很小 缓存相对短缺(通常不到一小时) 总的来说,内存使用不是问题 将有成千上万的读取 – 在缓存的生命周期中,我预计99.9%+缓存命中 必须是线程安全的 什么会有一个优越的性能,或在什么条件下一个解决方案优于另一个解决方案? ThreadLocal HashMap: class MyCache { private static class LocalMyCache { final Map map = new HashMap(); V get(K key) { V val = map.get(key); if (val == null) { val = computeVal(key); map.put(key, val); } return val; } } private final […]

异步日志记录

现在在我的应用程序中,在某些时候我们将一些重要的东西记录到日志文件中。 基本上只针对日志记录,我们正在创建可用数据的JSON,然后登录到日志文件。这是以JSON格式记录数据的业务要求。 现在,从可用数据创建JSON,然后记录到FILE会花费大量时间并影响原始请求返回时间。 现在的想法是改善引用。 我们讨论过的一件事是使用创建线程池 Executors.newSingleThreadExecutor() 在我们的代码中,然后将任务提交给它,将数据转换为JSON和后续日志记录。 这是一个很好的方法吗?因为我们正在管理线程池本身,是否会产生一些问题? 如果有人可以分享更好的解决方案,我将不胜 在某种程度上使用Log4j。我试图使用AsyncAppender但没有达到任何预期的结果。 我们使用的是EJB 3,Jboss 5.0,Log4j,java6。

使用jsp:include的JSP性能

我开始将一个大的JSP文件拆分成一些较小的JSP页面,这样我就可以在网站的其他区域重用它。 我可以采用离开的方法作为一个大的单片JSP文件,它接受参数并相应地调整它的行为。 我可以采取的另一种方法是将它分开,以便通过jsp:include调用它。 创建从服务器内调度的其他请求调用时,性能问题是什么? 将它保存为一个jsp页面是否更好的性能?

快速方形双倍

我正在寻找最快的双倍方式( double d )。 到目前为止,我提出了两种方法: 1. d*d 2. Math.pow(d, 2) 为了测试性能,我设置了三个测试用例,每个测试用例使用相同的种子为三种情况生成随机数,然后计算循环中的平方数1000000次。 在第一个测试用例中,使用random.nextDouble()生成数字,在第二种情况下使用random.nextDouble()*Double.MAX_VALUE ,在第三种情况下使用random.nextDouble()*Double.MAX_VALUE random.nextDouble()*Double.MIN_VALUE 。 几次运行的结果(近似结果,总是有一些变化,使用java 1.8运行,在Mac OSX Mavericks上为java 1.6编译) Approach | Case 1 | Case 2 | Case 3 ———•——–•——–•——- 1 | ~2.16s | ~2.16s | ~2.16s 2 | ~9s | ~30s | ~60s 结论似乎是方法1更快,但Math.pow似乎表现得有些奇怪。 所以我有两个问题: 1为什么Math.pow如此缓慢,为什么它会严重处理> 1 ,更糟糕的是< -1数? 2有没有办法提高性能超过我建议的方法1? 我在想的是: long l […]

用Java测量时间

所以我试图测量两个不同的算法实现完成给定任务所花费的时间,结果如下: i alg1 alg2 4 0.002 0.0 5 0.001 0.0 6 0.003 0.002 7 0.023 0.01 8 0.055 0.041 9 0.056 0.0 10 0.208 0.101 11 1.767 0.694 12 18.581 7.784 i只是一些输入参数。 我已经使用以下(幼稚)函数测量了算法的性能: private double getDuration() { return (double)(System.currentTimeMillis() – startTime) / (double)1000; } 获得更多真实结果(除了0.0,显然不是真的!)比使用System.currentTimeMillis()更好的方法是什么? 我知道我可以一遍又一遍地运行算法并总结他们的结果,但我有这种直觉,可能有一些更健壮的方法来测量Java中的传递时间(如果可能的话, real , user和sys !)。 谢谢

开发人员计算机的防病毒(Symantec Endpoint)配置

您对开发人员PC的“Symantec Endpoint”配置建议是什么? 我们使用Eclipse,IntelliJ,Ant和Tomcat进行Java开发。 使用“Symantec Endpoint”,构建和服务器启动速度非常慢。 无法替换或删除Symantec。 另请参阅https://stackoverflow.com/questions/111226/least-intrusive-antivirus-software-for-development-pc,http://cn.codinghorror.com/blog/archives/000803.html和http:// www.theserverside.com/news/thread.tss?thread_id=44775