我有一个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位版本.
我无法弄清楚我应该在哪里找出问题所在......
我知道双核CPU如何处理中断.我想知道如何在具有多个物理处理器的电路板上实现中断处理.
是否有任何中断责任由物理板的配置决定?每个处理器必须能够处理某些类型的中断,如磁盘I/O. 除非有一些电路来管理和分配适当的处理器中断?我的猜测是该方案必须是处理器中立的,因此任何处理器和内核都可以运行中断处理程序.
如果核心正在等待磁盘读取,那么当磁盘准备就绪时,该核心是否会运行中断处理程序?
Linux中是否有等效的C函数来读取CPU计数器及其频率?
我正在寻找一些类似于QueryPerformanceCounter函数的函数,该函数读取现代CPU中的64位计数器
我刚买了一个漂亮的MBA 13"Core i7.我被告知CPU速度会自动变化,而且非常疯狂.我真的希望能用一个简单的应用来监控它.
是否有任何Cocoa或C调用来查找当前时钟速度,而不会实际影响它?
编辑:我可以使用终端呼叫以及程序化来获得答案.
谢谢!
我知道这个问题只是部分与编程有关,因为我想得到的答案最初来自这两个问题:
为什么CPU核心数量如此之低(与GPU相比)?为什么我们不使用GPU而不是CPU,仅GPU或CPU?(我知道GPU是专用的,而CPU更多用于多任务等).我也知道存在内存(主机与GPU)限制以及精度和缓存功能.但是,就硬件比较而言,高端到高端的CPU/GPU比较GPU的性能要高得多.
所以我的问题是:我们可以使用GPU而不是CPU用于操作系统,应用程序等
我问这个问题的原因是因为我想知道当前计算机仍然使用2个主处理单元(CPU/GPU)和两个主存储器和缓存系统(CPU/GPU)的原因,即使它不是程序员想.
我有很多Java字节码的例子,我想从Clojure执行所有这些例子.每个字节码序列可能包含一个无限循环,在这种情况下,我想在几秒钟后停止运行它.我一直在期待将期货作为一种手段.在寻找几个实现后,我尝试了这两个代码:
(deref (future (loop[a 1] (recur a)) :done!) 1000 :impatient!)
Run Code Online (Sandbox Code Playgroud)
......以及https://gist.github.com/3124000上的代码
在这两种情况下,循环似乎都是适当的超时(在后一种情况下,未来报告已经完成和取消),但我看到我的CPU使用率上升到99%左右并保持在那里.我还看到每次运行此代码时,我的Java进程都会获得额外的线程.
在我看来,未来正在取消,但代码仍在运行.在我的程序中,我将需要运行和超时,一些非常紧密的无限循环(例如,相当于"20 PRINT GOTO 10"的Java字节码),我没有选择修改我正在运行的代码.
任何想法为什么我看到这种行为; 我能做些什么来阻止它; 还是替代方法让我实现运行和超时这样的代码的目标?
在接受采访时被问到.他们要求在速度方面订购以下内容:
非常确定磁盘搜索是最慢的,寄存器访问是最快的,但不太确定两者之间.任何人都可以解释一下吗?
我想对"非正常数据"以及它的内容有一个广泛的看法,因为我认为我唯一正确的事情是从程序员的角度来看与浮点值特别相关的事实,它与一般事项有关 -从CPU角度看计算方法.
有人可以为我解密这2个字吗?
编辑
请记住,我是面向C++应用程序而且只面向C++语言.
我想获得所有进程名称,CPU,内存使用情况和峰值内存使用情况的列表.我希望我可以使用ctypes.但我很高兴听到其他任何选择.谢谢你的时间.
在分析最近一个问题的结果时,我遇到了一个非常奇怪的现象:显然,HotSpot的额外一层JIT优化实际上会降低我机器上的执行速度.
这是我用于测量的代码:
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@BenchmarkMode(Mode.AverageTime)
@OperationsPerInvocation(Measure.ARRAY_SIZE)
@Warmup(iterations = 2, time = 1)
@Measurement(iterations = 5, time = 1)
@State(Scope.Thread)
@Threads(1)
@Fork(2)
public class Measure
{
public static final int ARRAY_SIZE = 1024;
private final int[] array = new int[ARRAY_SIZE];
@Setup public void setup() {
final Random random = new Random();
for (int i = 0; i < ARRAY_SIZE; ++i) {
final int x = random.nextInt();
array[i] = x == 0? 1 : x;
}
}
@GenerateMicroBenchmark public int normalIndex() …Run Code Online (Sandbox Code Playgroud)