Tag: 性能

Java性能进程与线程

我正在用Java实现一个工作池。 这基本上是一整堆对象,它们将获取数据块,处理数据然后存储结果。 由于IO延迟,工作人员将远远多于处理器核心。 服务器专用于此任务,我想从硬件中获取最大性能(但不,我不想在C ++中实现它)。 最简单的实现是使用单个Java进程来创建和监视许多工作线程。 另一种方法是为每个worker运行一个Java进程。 假设为了争论一个四核Linux服务器,您会预期哪些解决方案更具性能?为什么? 您可以假设工人永远不需要彼此沟通。

如何在Java或Python中使用文件系统缓存?

最近在Elasticsearch网站上发表的博客文章讨论了他们新的1.4测试版的function。 我很好奇他们如何使用文件系统缓存: 最近的版本增加了对doc值的支持。 实质上,doc值提供与内存中fielddata相同的function,但它们在索引时写入磁盘。 它们提供的好处是它们占用的堆空间非常小。 Doc值是从磁盘读取的,而不是从内存中读取的。 虽然磁盘访问速度很慢,但doc值会受益于内核的文件系统缓存。 与JVM堆不同,文件系统缓存不受32GB限制的约束。 通过将fielddata从堆转移到文件系统缓存,您可以使用更小的堆,这意味着更快的垃圾收集,从而更稳定的节点。 在此版本之前,doc值明显慢于内存中fielddata。 此版本中的更改显着提高了性能,使其几乎与内存中的fielddata一样快。 这是否意味着我们可以操纵文件系统缓存的行为而不是被动地等待操作系统的影响? 如果是这种情况,我们如何在正常的应用程序开发中使用文件系统缓存? 比如,如果我正在编写Python或Java程序,我该怎么做?

奇怪的BufferStrategy问题 – 游戏仅在英特尔GPU上运行速度很快

我遇到了一个非常奇怪的问题,我试着寻找几天和几天的答案。 我的游戏刚刚获得了一个新的粒子系统,但速度太慢而无法播放。 不幸的是,BufferedImage转换非常慢。 爆炸效果包括从.png文件加载的大约200个白色精灵,随机旋转,缩放和着色,以随机速度移动。 我试图通过三重/双重缓冲使性能更好,并遇到了一些问题。 我的第一次尝试是使用JPanel进行游戏。 我在JFrame的类(Main)中设置缓冲区,然后在Game(扩展JPanel)类中完成绘图,但没有Graphics g = bufferstrategy.getDrawGraphics();. 然后,在绘图方法结束时,我显示缓冲区IF没有丢失。 缓冲区总是“丢失”,因为我没有使用它的Graphics对象进行绘图。 但! 游戏运行得和地狱一样快! 在实际使用中没有缓冲! 但是怎么样? 此尝试最终没有出现图形错误,并且具有巨大的性能提升 – 但仅限于nVidia / AMD显卡。 英特尔GPU无法处理这个问题,屏幕闪烁白光。 所以,我最终设置并正确使用BufferStrategy。 Game类现在扩展Canvas,而不是JPanel,因为从JFrame获取Graphics,并且使用它在JPanel上绘制最终会在偏移量中,因为它在标题栏下绘制。 仍然很快,修复60 FPS。 现在,当我在JFrame(Main类)中创建BufferStrategy时,根本没有图片。 我通过在Game类(Canvas)中设置BufferStrategy来纠正这个问题。 图片现在是正确的,但游戏本身就像蜗牛一样慢。 一次爆炸使FPS下降至~10,但仅限于nVidia / AMD。 具有讽刺意味的。 即使是老式的英特尔GPU也能以60 FPS处理它,我还是在一台具有5到6年历史的集成英特尔GPU上以60 FPS的速度运行了10000个粒子。 发生爆炸时,我的卡会碰到高达100%的负载。 这是我的主要代码(整个代码不清楚且很长): public class Game extends Canvas { -snip- public void tick() { BufferStrategy bf = getBufferStrategy(); Graphics g […]

FastDateFormat的替代方法可以进行有效的日期解析吗?

我很清楚SimpleDateFormat的性能和线程问题,我决定使用FastDateFormat ,直到我意识到FastDateFormat只用于格式化,没有解析! 是否有FastDateFormat的替代品,可以FastDateFormat即用,比SimpleDateFormat快得多? 我相信FastDateFormat是速度更快的之一,所以任何速度都快的东西都可以。 好奇,任何想法为什么FastDateFormat不支持解析? 它是否严重限制其使用?

Java 6类加载的速度有多快?

ProGuard主页列为一项function: 重新定位和预validationJava 6的现有类文件,以充分利用Java 6的更快的类加载。 这涉及到Java 6的不同之处是什么? 这很重要吗? 它是否会影响multithreading通过默认类加载器的同步方面导致的减速?

如何通过减去2个nanoTime对象获得有意义的结果?

我创建了一个监视请求长度的filter。 long start = System.nanoTime(); … long end = System.nanoTime(); 我怎么能从这里得到毫秒数?

帮助Neuroph神经网络

对于我的研究生研究,我正在创建一个训练识别图像的神经网络。 我要做的不仅仅是采用RGB值网格,下采样,并将它们发送到网络的输入,就像许多例子一样。 我实际上使用了超过100个独立训练的神经网络来检测线条,阴影图案等特征。更像是人眼,它到目前为止工作得非常好! 问题是我有相当多的训练数据。 我展示了超过100个汽车外观的例子。 然后是100个人的样子。 然后超过100个狗的样子,等等。这是相当多的训练数据! 目前我在大约一周的时间内开始训练网络。 由于我需要调整和重新训练,这有点像我的进步。 我使用的是Neuroph ,作为低级神经网络API。 我正在运行双四核机器(16核超线程),所以这应该很快。 我的处理器百分比仅为5%。 Neuroph表现有什么技巧吗? 还是Java性能一般? 建议? 我是一名认知心理学博士生,作为一名程序员,我态度不错,但对性能编程知之甚少。

为什么这个内循环在通过外循环的第一次迭代中加快了4倍?

我试图重现这里描述的一些处理器缓存效果。 我知道Java是一个托管环境,这些例子不会完全翻译,但我遇到了一个奇怪的案例,我试图提炼出一个简单的例子来说明效果: public static void main(String[] args) { final int runs = 10; final int steps = 1024 * 1024 * 1024; for (int run = 0; run < runs; run++) { final int[] a = new int[1]; long start = System.nanoTime(); for (int i = 0; i < steps; i++) { a[0]++; } long […]

如何使用Java2D创建硬件加速映像?

我正在尝试创建一个快速图像生成器,它可以进行大量的2D变换和形状渲染,因此我尝试使用BufferedImage,然后获取Graphics2D对象来执行我的所有绘图。 我现在主要关注的是make非常快,所以我正在创建一个像这样的BufferedImage: GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); GraphicsConfiguration gc = ge.getDefaultScreenDevice().getDefaultConfiguration(); BufferedImage bImage = gc.createCompatibleImage(width, height, Transparency.TRANSLUCENT); Graphics2D graphics = bImage.createGraphics(); 但是,如果我这样做: System.out.println(bImage.getCapabilities(gc).isAccelerated()); 输出始终为false ,即使我使用-Dsun.java2d.opengl = True启动JVM也会打印该行: OpenGL pipeline enabled for default config on screen 0 我正在做一个BufferedImage,因为最后我想用ImageIO.write(bImage,“PNG”,file)将它保存到PNG文件中; 我可以创建一个VolatileImage,它会说它是加速的,但ImageIO在尝试保存时并不喜欢它,并说该图像无法转换为RenderedImage。 有关如何获得可存储到磁盘的加速图像的任何想法? 此外,我不想创建一个VolatileImage和复制到BufferedImage来保存,因为我的图像真的很大,我会遇到内存不足的问题……

与java相比,为什么这个C ++代码执行速度如此之慢?

我最近用Java编写了一个计算密集型算法,然后将其翻译成C ++。 令我惊讶的是,C ++的执行速度要慢得多。 我现在已经编写了一个更短的Java测试程序和相应的C ++程序 – 见下文。 我的原始代码具有很多数组访问权限,测试代码也是如此。 C ++的执行时间要长5.5倍(请参阅每个程序末尾的注释)。 结论在下面的第 1 21条评论之后…… 测试代码: g++ -o … Java快5.5倍 g++ -O3 -o … Java快2.9倍 g++ -fprofile-generate -march=native -O3 -o … (运行,然后g++ -fprofile-use等)Java快1.07倍。 我原来的项目(比测试代码复杂得多): Java快了1.8倍 C ++快了1.9倍 C ++快了2倍 Software environment: Ubuntu 16.04 (64 bit). Netbeans 8.2 / jdk 8u121 (java code executed inside netbeans) g++ […]