Tag: 性能

JSF调整

遇到JSF填补我们会话的问题。 前几天我们遇到了系统崩溃。 发送堆给IBM进行审核,发现我们有一些大到50M的会话。 他们在会话中发现了JSF组件,而且有些非常大。 那么,有没有可以完成的调整? 配置项看看? 或其他方向。 我们的系统是使用JSF和Spring为表示层构建的,后端是EJB,Spring和Hibernate都在WebSphere 6.1上运行。

如何将JDBC ResultSet检索为ArrayList?

我正在进行查询以检索大量ID(整数)。 而不是通过ResultSet迭代数百万次并将所有内容一个接一个地复制到ArrayList,有没有办法简单地将所有内容检索为ArrayList? 我知道ResultSet应该被迭代,因为底层实现可能是缓存内容,但在我的情况下,我只需要立即获取所有ID。 我知道我可以将FetchSize设置为一个很大的数字,但是我仍然需要逐个检索ID。 澄清:我想这样做的原因是表现。 分析告诉我,数百万次执行ResultSet.next(),ResultSet.getInt()和ArrayList.add()需要相当长的时间。 我认为数据库(我使用H2,用Java编写)可能在内存中的某个地方有数组或列表,所以我正在寻找一种方法让它直接复制到我而不是通过ResultSet迭代接口。

什么时候java比c ++快(或者什么时候JIT更快然后预编译)?

可能重复: JIT编译器与离线编译器 我听说在某些情况下,由于JIT优化,Java程序或java程序的某些部分能够比C ++(或其他预编译代码)中的“相同”代码执行得更快。 这是因为编译器能够确定某些变量的范围,避免一些条件并在运行时拉出类似的技巧。 你能给出一个(或更好 – 一些)例子吗? 并且可能概述了编译器能够优化字节码超出预编译代码可能性的确切条件? 注意:这个问题不是将Java与C ++进行比较。 它关于JIT编译的可能性。 请不要燃烧。 我也不知道有任何重复。 如果你是的话请指出来。

将行提取的Oracle大小设置得更高会使我的应用程序更慢?

正如此处详述并在 此处确认的那样,Oracle在通过JDBC查询数据时返回的默认行数是10.我正在开发一个必须读取和比较数据库中大量数据的应用程序。 我认为如果我们只是将defaultRowPrefetch增加到类似于1000的东西,那么我们的应用程序肯定会更快。 事实certificate,它的表现较慢 ,约为20%。 然后,我们决定从10开始慢慢增加数字,看看它的表现如何。 通过将它设置在100到200之间我们已经看到了大约10%的增长。但是,我绝不会猜到,将它设置得更高会使我们的应用程序执行得更慢。 任何想法为什么会这样? 谢谢! 编辑: 为了澄清,我使用的是Oracle 11g R2和Java 6。 编辑2: 好的,我想重申一下我的问题,因为从下面的答案来看,我并没有正确表达自己: 如果我设置更高的提取大小,我的应用程序执行速度有多快? 对我来说,这听起来像是在说“我们给你一个更快的互联网连接,即一个更胖的管道,但你的网页浏览速度会慢一点。 所有其他事情都是平等的,正如我们在测试中所做的那样,我们非常好奇我们的应用程序只有这一次变化才能表现得更差。

Java:有效地计算大文件的SHA-256哈希值

我需要计算一个大文件(或其中一部分)的SHA-256哈希值。 我的实现工作正常,但它比C ++的CryptoPP计算慢得多(25分钟与10分钟~30GB文件)。 我需要的是C ++和Java中类似的执行时间,因此哈希几乎可以在同一时间准备就绪。 我也尝试过Bouncy Castle实现,但它给了我相同的结果。 这是我如何计算哈希: int buff = 16384; try { RandomAccessFile file = new RandomAccessFile(“T:\\someLargeFile.m2v”, “r”); long startTime = System.nanoTime(); MessageDigest hashSum = MessageDigest.getInstance(“SHA-256”); byte[] buffer = new byte[buff]; byte[] partialHash = null; long read = 0; // calculate the hash of the hole file for the test long offset = […]

在生产服务器上启用jmx(lambda探针)是个好主意吗?

我们在Sun VM 1.5.0_06-b05上运行的Tomcat 5.5.17上部署的Web应用程序出现了一些减速,我们的托管公司没有提供足够的数据来查找问题。 我们正在考虑在生产服务器上安装lambda探针 ,但它需要启用JMX(com.sun.management.jmxremote)才能获取内存和CPU统计信息。 启用JMX会导致严重的性能损失吗? 如果我们启用JMX,我们是否会打开任何安全漏洞? 如果我们只启用对JMX的本地访问,是否需要设置安全身份validation? 是否有人使用相同的(tomcat + lambda探针)在生产中没有问题? UPDATE 看看答案似乎单独启用JMX不会给VM带来很大的开销。 如果附加到VM的监视应用程序(无论是JConsole , lambda探测器还是其他任何程序)正在以过度的奉献精神进行轮询,则可能会产生额外的工作。

java游戏图像加载速度非常慢

我正在尝试开发一种从[100] [100]矩阵中导入背景图像的游戏。 矩阵将保持int值以与应在背景上绘制的内容相关联。 循环将图像绘制到canvas并根据用户的键输入更新它。 然而,一切都是油漆和移动都很好,很慢。 是否有更好的方法来加载图像而不是我正在做的方式? 这是主要的游戏类: package com.game.src.main; import java.awt.Canvas; import java.awt.Dimension; import java.awt.Graphics; import java.awt.GraphicsDevice; import java.awt.GraphicsEnvironment; import java.awt.event.KeyEvent; import java.awt.image.BufferStrategy; import java.awt.image.BufferedImage; import java.io.IOException; import javax.swing.JFrame; public class Game extends Canvas implements Runnable{ static GraphicsEnvironment environment; static GraphicsDevice device; private static final long serialVersionUID = 1L; public static final int WIDTH = […]

JAXB与DOM和SAX

我一直在使用DOM来解析我的小xml文档。阅读有关JAXB的信息( http://www.oracle.com/technetwork/articles/javase/index-140168.html ),我打算使用JAXB DOM的instaed。 如果这是一个正确的方法,请告诉我。

Hibernate性能最佳实践?

我正在使用Hibernate 3编写Web应用程序。 所以,过了一会儿我注意到事情很慢。 所以我测试了hibernate profiler,发现hibernate会为简单的操作做出无理的多次db调用。 原因是我加载一个Object(这个对象有几个“父母”),这些“父母”有其他“父母”。 所以基本上hibernate会加载它们,即使我只需要基本对象。 好的,所以我看着懒加载。 这导致我进入Lazyloading-exception,因为我有一个MVC webapp。 所以现在我有点困惑,我最好的方法是什么。 基本上我只需要更新对象上的单个字段。 我已经拥有了对象键。 我应该:1。进入延迟加载。 然后重写我的应用程序以获得开放会话视图? 2.挖掘延迟加载。 然后重写我的dao更具体。 例如,编写DAO方法,这些方法将返回仅与每个用例所必需的内容相关联的对象? 可能是很多额外的方法…… 3.从头开始hibernate并自己做吗? 4.现在真的不能想到其他解决方案。 有什么建议么? 什么是最佳做法?

java中相同代码块的运行时间不同。 这是为什么?

我有以下代码。 我只是想检查一下代码块的运行时间。 而且我错误地复制并粘贴了相同的代码并获得了一个有趣的结果。 虽然代码块是相同的,但运行时间是不同的。 并且code block 1比其他code block 1花费更多时间。 如果我切换代码块(say i move the code blocks 4 to the top)那么代码块4将比其他代码块花费更多时间。 我在代码块中使用了两种不同类型的数组来检查它取决于它。 结果是一样的。 如果代码块具有相同类型的数组,则最顶层的代码块需要更多时间。 请参阅以下代码和给定的输出。 public class ABBYtest { public static void main(String[] args) { long startTime; long endTime; //code block 1 startTime = System.nanoTime(); Long a[] = new Long[10]; for (int i = 0; i < […]