Tag: performance

在Java中逐行读取和写入大文件的最快方法

我一直在寻找最快的方法来读取和写入具有有限内存(约64MB)的Java中的大文件(0.5 – 1 GB)。 文件中的每一行代表一条记录,所以我需要逐行获取它们。 该文件是普通文本文件。 我尝试过BufferedReader和BufferedWriter,但它似乎不是最好的选择。 读取和写入大小为0.5 GB的文件大约需要35秒,只读取写入而不进行处理。 我认为这里的瓶颈是写作,因为单独阅读大约需要10秒钟。 我试图读取字节数组,但是在每个读取的数组中搜索行需要更多时间。 有什么建议吗? 谢谢

为什么不对JSF页面进行预编译(至少部分),而是在每次构建视图时进行解析,评估?

我不知道它是否真实,但据我所知,我相信,JSF EL和xhtml页面不是预编译的,只是在需要时使用,而是每次查看时都会对它们进行解析,评估和编译建成。 我不明白为什么这样做! 为什么不只是解析和编译它一次,好吧至少部分,渲染一些组件可能依赖于动态获取的变量,因此它们可能会在稍后呈现,但为什么延迟页面上的所有组件? 无论最大值可以预先编译并准备好使用,为什么不在部署应用程序时执行此操作? 这不会改善页面的渲染时间吗?

ExecutorService令人惊讶的性能收支平衡点 – 经验法则?

我试图弄清楚如何正确使用Java的Executors。 我意识到向ExecutorService提交任务有其自己的开销。 但是,我很惊讶它看到它的高度。 我的程序需要以尽可能低的延迟处理大量数据(股票市场数据)。 大多数计算都是相当简单的算术运算。 我试着测试一些非常简单的东西:“ Math.random() * Math.random() ” 最简单的测试在一个简单的循环中运行这个计算。 第二个测试在匿名Runnable中进行相同的计算(这应该衡量创建新对象的成本)。 第三个测试将Runnable传递给ExecutorService (这测量引入执行程序的成本)。 我在我的小型笔记本电脑上运行测试(2 cpus,1.5 gig ram): (in milliseconds) simpleCompuation:47 computationWithObjCreation:62 computationWithObjCreationAndExecutors:422 (大约四次运行中,前两个数字最终相等) 请注意,执行程序所花费的时间远远多于在单个线程上执行的时间。 对于1到8之间的线程池大小,数字大致相同。 问题:我是否遗漏了一些明显的或预期的结果? 这些结果告诉我,我传递给执行程序的任何任务都必须进行一些非平凡的计算。 如果我正在处理数百万条消息,并且我需要对每条消息执行非常简单(且便宜)的转换,我仍然可能无法使用执行程序…尝试在多个CPU之间传播计算可能最终会比仅仅更昂贵在一个线程中完成它们。 设计决策变得比我原先想象的要复杂得多。 有什么想法吗? import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; public class ExecServicePerformance { private static int count = 100000; public static void main(String[] args) throws InterruptedException { […]

何时使用静态方法和字段?

我知道静态是什么,但不知道何时使用它。 静态变量:我只将它用于常量字段。 有时类中有几十个常量,因此使用静态常量可以节省大量内存。 还有其他典型的用例吗? 静态方法:我在编写关于算法的类时使用它。 例如,提供不同排序算法的类。 它是否反对OOP设计? 我认为保持这种方式比在每个需要使用它们的类中实现排序算法更好。 我错了吗? 什么是好用例? 此外,使用静态和非静态字段/方法之间是否存在性能差异?