如何使Java应用程序更快?

Mad*_*dan -4 java multithreading

我有一个计费守护程序,必须以非常快的方式处理数十万个数据.我实现ExecutorSerivce了并行处理.它确实提高了速度,但不是很多.处理1,00,000条记录大约需要2.5到3个小时.如何在半小时内处理这些数据更快?

我已经为执行设置编写了以下内容:

-Xms2048M -Xmx2048M -XX:MaxPermSize=256m
Run Code Online (Sandbox Code Playgroud)

我试图用1个生产者和4个消费者实现Producer Consumer模型.每个列表可以包含10,000条记录.

ArrayBlockingQueue<BillableList> list =new ArrayBlockingQueue<BillableList>(10);

ExecutorService threadPool = Executors.newFixedThreadPool(5);
threadPool.execute(new Consumer("pool1", list)); 
threadPool.execute(new Consumer("pool2", list));
threadPool.execute(new Consumer("pool3", list));
threadPool.execute(new Consumer("pool4", list));
Future producerStatus = threadPool.submit(new Producer("Producer", list)); 
producerStatus.get(); 
threadPool.shutdown(); 
Run Code Online (Sandbox Code Playgroud)

在将记录更新到数据库时,我也收到了很多"超出数据库锁等待超时"的异常.这是因为不同的消费者同时尝试同一个用户吗?如何让不同的消费者从ArrayBlockingQueue列表中获取不同的数据?

Pup*_*ppy 10

唯一可能的答案是"使用分析器并找出它为什么慢".当您不知道问题出在何处时,您无法对问题采取任何措施.你打算怎么做,选择一个随机函数并进行微优化?Profiler数据或永远不会发生任何事情.

  • @Gray:你的答案主要是猜测.投机的事实就是你所能做到的事实表明了我所说的正确性. (4认同)
  • 这也是*准确*答案. (2认同)