我有一个JavaFX APP,其中包含两个列表视图,显示从我的服务器收到的传入客户订单(使用自定义cellfactory).我还有一些tableview显示来自Postgres数据库的信息(这些信息分布在tabpane中的几个选项卡中).用户必须接受订单(通过点击它),并在文本框中输入一些信息.
该应用程序最初是使用Java7编写的.我没有任何问题.但最近我决定改用Java8.我修改了我的代码以使用lambdas并在应用程序中添加了一些额外的东西:
现在,应用程序运行良好,但在运行2-3小时后,它变得迟缓.因为对我来说我模拟使用jstack分析器内的行为,是硬top -H,并匹配pid以nid找出发生了什么.
这样我发现罪魁祸首是QuantumRendererCPU使用率为95 +%:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
30300 utilizat+ 20 0 5801608 527412 39696 S 95,1 6,5 60:57.34 java
"QuantumRenderer-0" #9 daemon prio=5 os_prio=0 tid=0x00007f4f182bb800 nid=0x765c runnable [0x00007f4eeb2a1000]
java.lang.Thread.State: RUNNABLE
at com.sun.prism.es2.X11GLDrawable.nSwapBuffers(Native Method)
at com.sun.prism.es2.X11GLDrawable.swapBuffers(X11GLDrawable.java:50)
at com.sun.prism.es2.ES2SwapChain.present(ES2SwapChain.java:186)
at com.sun.javafx.tk.quantum.PresentingPainter.run(PresentingPainter.java:107)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
at com.sun.javafx.tk.RenderJob.run(RenderJob.java:58)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:125)
at java.lang.Thread.run(Thread.java:745)
Run Code Online (Sandbox Code Playgroud)
运行应用程序的机器使用的是润滑剂的64位版本.
我无法弄清楚我应该在哪里找出问题所在......