Tag: 性能

java中的速率控制

我正在寻找一个好的解决方案或可能是一个API来解决以下问题: 我的应用程序在循环中执行任务,例如它发送电子邮件等。我需要将消息的平均速率限制为例如每秒100条消息或每分钟1000条消息…… 不,我正在寻找完成此任务的算法或API。

同步与ReadWriteLock性能

我试图certificate当有许多读者和只有一些作者时,synchronized会更慢。 不知怎的,我certificate了相反。 RW示例,执行时间为313 ms: package zad3readWriteLockPerformance; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; public class Main { public static long start, end; public static void main(String[] args) { Runtime.getRuntime().addShutdownHook(new Thread(() -> { end = System.currentTimeMillis(); System.out.println(“Time of execution ” + (end – start) + ” ms”); })); start = System.currentTimeMillis(); […]

在Java中需要多长时间? 用Java测量延迟时间

我不想更改此代码,我只对JVM,OS或内核定制/配置感兴趣以获得最佳结果! 我有一个第二个循环(1000 x 1ms) public static void main(String[] args) throws InterruptedException { long start = System.nanoTime(); for (int i = 0; i < 1000; i++ ) { Thread.sleep(TimeUnit.MILLISECONDS.toMillis(1)); } long duration = System.nanoTime() – start; System.out.println("Loop duration " + duration / TimeUnit.MILLISECONDS.toNanos(1) + " ms."); } 在我的带有内核3.12的Fedora 20上,这个循环需要1055毫秒。 这是相当不错的结果,平均超过1100ms 。 是否可以使用自定义JVM标志或操作系统配置使此代码更快? Loop duration 1055 ms.

可执行jar子运行得非常慢

我已经完成了几个项目并将它们打包成jar文件,但我注意到我的jar文件比我的IDE运行得慢得多。 我使用Eclipse来编译和运行我的程序。 在Eclipse中,我完成了一切。 当我将项目打包为可运行的Jar并通过双击执行它时,一切仍然有效。 但是当我有动画时,程序运行速度非常慢。 而不是Eclipse中的每秒30帧,我现在每秒大约2帧。 动画非常迟钝。 有趣的是,当我从命令提示符( java -jar MyCode.jar )运行相同的Jar时,滞后消失,我的程序正常工作。 我目前不知道是什么导致了这个问题。 我的电脑正在运行Windows Vista。 我正在使用最新版本的JRE和JDK。 我的程序包含动画,没什么特别的。 感谢名单 解决方案:我的计算机上有几个不同版本的Java,并且使用了不正确的版本。

在Java中加载和缓存图像的最佳方法是什么?

我有一个超过一千个16乘16像素平铺图像的大集合,我将用于Java制作的游戏。 在不耗尽JVM可用内存的情况下存储磁贴的最佳方法是什么? 我认为产生1000+ BufferedImages可能并不明智…… 保持图像准备就绪的主要目的是加载地图,这些地图将根据地图文件动态生成。

Java中内存分配的典型速度是多少?

我正在分析Java应用程序,并发现对象分配发生的速度比我预期的要慢得多。 我运行了一个简单的基准测试来尝试建立小对象分配的整体速度,我发现在我的机器上分配一个小对象(3个浮点数的向量)似乎需要大约200纳秒。 我正在运行(双核)2.0 GHz处理器,因此大约有400个CPU周期。 我想问一下这里的人们是否有关于Java应用程序的概述,然后才能预期这种速度。 这对我来说似乎有点残忍和不寻常。 毕竟,我认为像Java这样可以压缩堆并重定位对象的语言会让对象分配如下所示: int obj_addr = heap_ptr; heap_ptr += some_constant_size_of_object return obj_addr; ….这是几行assembly。 至于垃圾收集,我不会分配或丢弃足够的对象来进行游戏。 当我通过重用对象来优化我的代码时,我得到的性能大约为15纳秒/对象我需要处理而不是每个对象需要处理200 ns,因此重用对象可以极大地提高性能。 我真的很想不重用对象,因为这会使符号变得多毛(许多方法需要接受receptacle参数而不是返回值)。 所以问题是:对象分配花费这么长时间是否正常? 或者我的机器上可能出现问题,一旦修复,可能会让我在这方面有更好的表现? 小对象分配通常需要多长时间用于其他人,并且是否有典型值? 我正在使用客户端计算机,目前不使用任何编译标志。 如果您的机器上的速度更快,那么您机器的JVM版本和操作系统是什么? 我意识到个人里程在性能方面可能会有很大差异,但我只想问我上面提到的数字是否正好在他们正确的范围内。

常量实用程序类中的最终关键字

在使用具有常量实用程序类的final关键字时,我们可以获得性能和/或任何其他好处的任何差异。 [此类仅包含静态最终字段和私有构造函数以避免对象创建] public class ActionConstants { private ActionConstants() // Prevents instantiation { } public static final String VALIDFIRSTLASTNAME = “[A-Za-z0-9.\\s]+”; public static final String VALIDPHONENUMBER = “\\d{10}”; … … } 只有差异才是最终的阶级 public final class ActionConstants { private ActionConstants() // Prevents instantiation { } public static final String VALIDFIRSTLASTNAME = “[A-Za-z0-9.\\s]+”; public static final String VALIDPHONENUMBER […]

外部库会使应用程序变慢吗?

我正在构建一个从网页上抓取信息的应用程序。 为此,我选择使用名为Jsoup的html scraper,因为它使用起来非常简单。 Jsoup还依赖于Apache Commons Lang libray。 (他们一起共计385kB)。 所以Jsoup将用于下载页面并解析它。 我的问题是,如果使用这些简化库,而不是使用Androids内置库,是否会使我的应用程序变慢? (在下载数据和解析方面)。 我以为内部库会针对Android进行优化。

为什么java代码缓存大小在增长?

我有这个基本程序,除了坐在那里等待输入之外什么都不做: import java.io.*; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Basic { public static void main(String[] args) throws Exception{ try{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String input; input=br.readLine(); }catch(IOException io){ io.printStackTrace(); } } } 当我运行这个: java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=15001 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false Basic 我通过JConsole连接看到这个: 这仅仅是因为核心java bytcode首先被编译? 当进程没有做任何事情时,如何增加codecache? 当我有这个版本(使用Thread.sleep )时: public class Basic { public […]

如何让JVM启动更快?

可能重复: 如何加快Java VM(JVM)的启动时间? 我正在用Java编写命令行实用程序(或者可能在另一种基于JVM的语言中)。 问题是JVM启动时间。 例如,JVM的启动速度比Python和Ruby慢。 如何让JVM统计更快? 我可以“提前”(在Linux和Windows中)以某种方式加载JVM,以便每次在命令行中运行我的实用程序时都不应该加载它吗?