Tag: performance

Java verbose:gc如何读取输出?

我有一个Java应用程序,它有一些性能问题,有人建议我在verbose:gc模式下运行它。 这已经完成,但我不知道如何解释日志记录。 是否有可能向我解释这一切意味着什么,或建议我如何提高绩效? 输出日志可在以下url找到: http : //pastebin.com/uDNPEGcd 在此先感谢,亲切的问候,马腾

Java vs .NET性能

在我编写这个小代码来比较我的计算机中的.NET 4.5和Java 8性能后,我非常惊讶: class ArrayTest { public int[][] jagged; public ArrayTest(int width, int height) { Height = height; Width = width; Random rng = new Random(); jagged = new int[width][]; for (int i = 0; i < height; i++) { jagged[i] = new int[width]; for (int j = 0; j < jagged[i][j]; j++) { jagged[i][j] […]

哪一个运行得更快,ArrayList或LinkedList?

List li = new LinkedList(); for (int i = 0; i < 100; i++) { li.add(i); } long start1 = System.nanoTime(); li.get(57); long end1 = System.nanoTime(); long diff1 = end1-start1; System.out.println(“Time taken by LinkedList = “+diff1); List al = new ArrayList(); for (int i = 0; i < 100; i++) { al.add(i); } 我在两个列表上执行的操作,当我打印出所用的时间时,ArrayList总是比LinkedList运行得更快。 有人可以解释哪个时间表现更好吗? […]

Java Math.min / max性能

编辑:maaartinus给出了我正在寻找的答案,而tmyklebu的问题数据帮了很多,所以谢谢两者! 🙂 我已经阅读了一些关于HotSpot如何在代码中注入一些“内在函数”的内容,特别是对于Java标准Math libs( 来自这里 ) 所以我决定尝试一下,看看HotSpot可以直接做出多大的反对(特别是因为我听说min / max可以编译成无分支的asm)。 public static final int max ( final int a, final int b ) { if ( a > b ) { return a; } return b; } 那是我的实施。 从另一个SO问题我已经读过,使用三元运算符使用额外的寄存器,我没有发现在执行if块和使用三元运算符之间存在显着差异(即返回(a> b)?a:b)。 分配一个8Mb的int数组(即200万个值)并随机化它,我做了以下测试: try ( final Benchmark bench = new Benchmark( “millis to max” ) ) { int […]

为什么BufferedReader的性能比BufferedInputStream差得多?

我知道使用BufferedReader(包装FileReader)将比使用BufferedInputStream(包装FileInputStream)慢得多,因为原始字节必须转换为字符。 但我不明白为什么它这么慢! 以下是我正在使用的两个代码示例: BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream(filename)); try { byte[] byteBuffer = new byte[bufferSize]; int numberOfBytes; do { numberOfBytes = inputStream.read(byteBuffer, 0, bufferSize); } while (numberOfBytes >= 0); } finally { inputStream.close(); } 和: BufferedReader reader = new BufferedReader(new FileReader(filename), bufferSize); try { char[] charBuffer = new char[bufferSize]; int numberOfChars; do { numberOfChars […]

最有效 – 性能明智 – 用于JVM间通信

我有一个Java应用程序,需要在不同进程之间进行通信。 进程可以在相同的JVM或不同的JVM中运行,但可以在同一台机器上运行。 我的应用程序需要向另一个进程(相同或不同的JVM)提交“消息”并忘记它。 类似于IBM“MQ”之类的消息传递队列,但是简单,只使用内存,没有IO到硬盘以获得性能提升。 我不确定Performance prescriptive的最佳方法是什么。 我想知道RMI在性能方面是否有效,我认为它需要一些开销。 那么使用本地主机的TCP / IP套接字呢? 还有其他想法吗?

Java:Enums与if-then-else的表现

我没有真正的幸运,通过使用谷歌获得这个比较的简明答案,而不是做我自己耗时的评估,我想我会先问。 我很确定使用Enums的switch语句比if-then-else语句执行得更快,不管它是否是一个明显的区别是另一个问题。 有人可以为我阐明这一点吗? 感谢快速回复的人,我将在未来的项目中牢记这一点。

有没有办法提高FlyingSaucer的性能?

我已经按照这篇文章使用FlyingSaucer将XHTML转换为PDF,它很棒,但有一个主要的垮台……它的速度非常慢! 我发现从XHTML渲染PDF需要1到2分钟,无论该页面有多简单。 基本代码: import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import org.xhtmlrenderer.pdf.ITextRenderer; import com.lowagie.text.DocumentException; public class FirstDoc { public static void main(String[] args) throws IOException, DocumentException { String inputFile = “firstdoc.xhtml”; String url = new File(inputFile).toURI().toURL().toString(); String outputFile = “firstdoc.pdf”; OutputStream os = new FileOutputStream(outputFile); ITextRenderer renderer = new ITextRenderer(); renderer.setDocument(url); renderer.layout(); renderer.createPDF(os); os.close(); […]

为什么“新”关键字比赋值更有效?

我有两种方法可以读取字符串,并创建Character对象: static void newChar(String string) { int len = string.length(); System.out.println(“Reading ” + len + ” characters”); for (int i = 0; i < len; i++) { Character cur = new Character(string.charAt(i)); } } 和 static void justChar(String string) { int len = string.length(); for (int i = 0; i < len; i++) { Character […]

JasperReports fillReport太慢且耗费资源

我发现从Java应用程序填充报告时,JasperReports真的很慢 。 该程序挂起在这一行: print = JasperFillManager.fillReport(report, parameters, xmlDataSource); 它通常在那里停留3分钟,消耗高达300Mb的RAM和50%的CPU 。 report是一个使用3个子report已编译(.jasper)报表。 数据源是一个非常大的XML文件(大约100k行,1.5Mb) 该机器是3Ghz双核,带有4Gb RAM 那么,我该如何提高报告填充性能呢?