Tag: 性能

哪个更快? 更多可运行的工作更少,或者更少的可运行工作? (ExecutorService的)

我试图弄清楚如何从multithreading应用程序中获得最大性能。 我有一个我创建的线程池,如下所示: ExecutorService executor = Executors.newFixedThreadPool(8); // I have 8 CPU cores. 我的问题是,我应该将工作分成只有8个runnables / callables,这与线程池中的线程数相同,还是应该将它分成1000000 runnables / callables呢? for (int i = 0; i < 1000000; i++) { Callable worker = new MyCallable(); // Each worker does little work. Future submit = executor.submit(worker); } long sum = 0; for (Future future : list) sum += […]

每次Java更新时,web启动jarvalidation都会变慢

我们有一个90MB的(Eclipse RCP)应用程序,带有139个自签名jar,在没有Web Start的情况下从8s开始,在Java7的旧版本中以10s开始。我们将Java配置为不使用浏览器代理,即deployment.proxy.type = 0 。 随着每次更新Oracle的Java启动性能下降。 完全启动需要花费越来越多的时间: 7u60 / 7u65 / 8u25:13s(网络启动处理5s后开始) 7u75:23s 8u31:20s 8u40:29s 8u51 / 8u60ea:32s 我该怎么做才能解决这个问题? 从跟踪/日志中我可以看到,这种减速很可能完全是由于validation缓存的jar需要更多时间。 请注意, 此问题类似,但未提供以下详细信息: 诊断: 缓存时,更新检查仅运行0.5秒(服务器返回“304 Not Modified”),但即使完全下载,千兆网络也只需几秒钟。 更新检查后,每个jar XXX都有一个日志条目: validation缓存的jar XXX.jar 完成后,启动com.sun.javaws.Main,之后相同的validation似乎再次发生并花费大约相同的时间,然后应用程序启动。 validation缓存jar所花费的时间似乎与应用程序启动前所需的额外时间相对应。 Web启动启动屏幕始终显示与更新检查相对应的约2秒,然后隐藏。 几乎20秒后,Java控制台终于出现,我的应用程序实际启动了。 在延迟期间,jp2launcher.exe在具有超线程(8个逻辑核心)的四核上使用大约16%的处理器时间。 所以看起来它完全使用了一个逻辑处理器。 我已经尝试但没有任何区别: 清除Web启动缓存(无数次) 配置deployment.properties以禁用证书吊销检查(以及blacklist.check和validation.ocsp,validation.crl) 离线运行 使用版本下载协议 添加到站点例外列表 检查Web服务器日志中的问题。 没有找到,所有138个jar子的更新检查大约500毫秒。 使用另一个Web服务器 检查证书到期日2016年2月17日 用JaNelavalidation了我的jnlp,发现没有严重的问题 创建部署规则集以允许应用程序运行未签名以加快validation。 这应该是可能的,看起来像是一种很有前途的方法来解决这个问题,但我无法让它发挥作用。 另见我对这篇文章的回答。 将Java配置为“不启动控制台” 细节:7u60上的一些奇怪的行为在7u60中,应用程序在大约5秒后启动,之后Java控制台APPEARS在应用程序启动时在后台进行jarvalidation。 但是.log文件报告在完成所有validation后应用程序启动。 它将此报告为25秒,然后显示我的应用程序的第一个System.out,它实际上仅在5秒钟后发生。 […]

Java代理发现机器人

我写了一个类,ProxyFinder连接到随机ips并首先ping它们,如果它们响应,尝试通过公共代理端口创建一个http代理连接。 目前,它只是连接到随机ips。 这相对较快,每小时发现一些代理。 但是,我想以某种方式检查我之前是否已连接到ip。 首先我尝试将它们保存在一个列表中,但是使用了超过10GB的ram ..我在下面的代码中包含了一个方法,该方法使用RandomAccessFile将数据写入缓存,但搜索到的速度非常慢每个连接变大的整个文件。 我以尽可能小的格式存储数据,每个ip只需四个字节。 即使这是4 * 256 * 256 * 256 * 256字节.. = 16gb的原始ram ..或每次要测试另一个ip时搜索的16gb文件。 我还尝试创建一个单独的线程来生成ips,根据文件检查它们,然后将它们添加到探针线程可以从中拉出的队列中。 它无法跟上探测线程。 如何快速检查我是否已连接到IP,而不是非常慢或使用可笑的内存量? package net; import java.io.File; import java.io.RandomAccessFile; import java.net.HttpURLConnection; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.Proxy; import java.net.URL; import java.util.Arrays; import java.util.concurrent.atomic.AtomicInteger; /** * * @author Colby */ public class ProxyFinder { /** * @param […]

如何查找哪些对象创建的垃圾最多

我有一个应用程序,包含80个不同类的大约80个实例。 由于我的应用程序是实时的,因此这些类的某些子集生成的垃圾量是不可接受的并且停止世界暂停太长时间。 我想要找到的是哪些类负责在堆上创建最大数量的对象(不是聚合大小,而是原始对象数),因为这是导致世界暂停停留这么长时间的原因。 我怎么发现这个? 如果需要JVisualVM,我就有这个。

在1.6 VM上运行“-target 1.5”生成的Java类文件的性能影响?

在几个月前将我的整个设置从Java 1.5迁移到1.6(J2EE,Tomcat)之后,我才意识到Maven仍然配置为通过Sun的javac参数“-target 1.5”生成针对1.5的类文件。 将“-target 1.5”更改为“-target 1.6”时,我可以期待任何性能提升吗?

Hadoop:处理大型序列化对象

我正在开发一个应用程序来使用Hadoop框架处理(并合并)几个大型java序列化对象(订单GB的大小)。 Hadoop存储在不同主机上分发文件块。 但是由于反序列化将要求所有块都出现在单个主机上,因此它会大大提高性能。 与文本文件不同,我如何处理不同块无法单独处理的情况?

将设备数据与Web服务器同步

我的应用程序中有数据,必须根据网络可用性在服务器上更新。 我使用sqlite将这些数据存储在android上的本地数据库中。 目前的想法是: 应将数据插入本地sqlite数据库 插入数据后,服务应该等待它检查网络可用性并将其发送到服务器并等待成功响应。 如果从服务器收到响应true,它应该更新该sqlite行的同步状态并移动到下一行以发送数据。 我想找出将此数据排队以将其发送到服务器的最佳方法,此外,当网络不可用时,此队列应停止向服务器发送数据。 由于java中有许多队列可用,因此最好保存这些数据。 由于数据可以增长到任何无限大小。 这就像生产者 – 消费者问题,但解决它的最有效方法是什么。 提前致谢。

JavaFX上Canvas.snapshot()的替代方案

我正在使用JavaFX中的Canvas开发一个小图形引擎。 在某些时候,我必须渲染一个屏幕外图像,然后使用其GraphicContext在我的主canvas上打印它。 我现在正在使用此代码: private Canvas offScreenCanvas; private GraphicsContext offScreenGraphic; private SnapshotParameters parameters; private WritableImage offScreenImage; […] offScreenCanvas = new Canvas(WIDTH, HEIGHT); offScreenGraphic = offScreenCanvas.getGraphicsContext2D(); parameters = new SnapshotParameters(); parameters.setFill(Color.TRANSPARENT); […] offScreenImage = offScreenCanvas.snapshot(parameters, offScreenImage); graphic.setGlobalBlendMode(BlendMode.HARD_LIGHT); graphic.drawImage(offScreenImage, 0, 0); graphic.setGlobalBlendMode(BlendMode.SRC_OVER); 我的问题是方法snaphot()在每次执行中花费太多时间,约14毫秒。 我需要至少以60fps更新canvas,所以这几乎消耗了我必须画的所有时间。 是否有另一种方法从canvas中获取Image或WritableImage ? 也许另一个不同的过程

JSF的性能调优

任何人都可以列出调整JSF WebApp @的最佳技巧。

JPA延迟加载性能有多重要?

我理解这对于具体的应用是非常具体的,但我只是想知道一般意见是什么,或者至少在这个问题上有一些个人经验。 我对“视图中的开放会话”模式感到厌恶,所以为了避免这种情况,我正在考虑简单地抓取所有内容,并在服务层中使用查询来获取更大的内容。 有人用这个并后悔了吗? 是否有一些优雅的解决方案可以在视图层中延迟加载我不知道的?