Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么是样板代码、热点代码和热点?_Java_Performance_Language Agnostic_Benchmarking - Fatal编程技术网

Java 什么是样板代码、热点代码和热点?

Java 什么是样板代码、热点代码和热点?,java,performance,language-agnostic,benchmarking,Java,Performance,Language Agnostic,Benchmarking,我知道这些术语用于绩效实现/优化 最近,他们一直在研究这个问题,并尝试进行搜索;但是没有得到任何例子,这些例子清楚地阐述/描述了这些概念,并在实际开发场景中实现了这些问题/概念 请有人彻底解释一下这些术语、示例场景以及这些概念和术语可能在哪里使用 谢谢 “样板”与性能无关:它只是指定义应用程序或使用某个框架所需的标准代码。它的代码可能在每个应用程序中都是相同的 另一方面,“热点”是指代码中执行多次的部分,因此其性能对整个应用程序的性能非常重要。通常,热点是通过实际的分析来确定的:如果执行多次,它

我知道这些术语用于绩效实现/优化

最近,他们一直在研究这个问题,并尝试进行搜索;但是没有得到任何例子,这些例子清楚地阐述/描述了这些概念,并在实际开发场景中实现了这些问题/概念

请有人彻底解释一下这些术语、示例场景以及这些概念和术语可能在哪里使用

谢谢

“样板”与性能无关:它只是指定义应用程序或使用某个框架所需的标准代码。它的代码可能在每个应用程序中都是相同的

另一方面,“热点”是指代码中执行多次的部分,因此其性能对整个应用程序的性能非常重要。通常,热点是通过实际的分析来确定的:如果执行多次,它就不是热点,但它非常小,对性能的影响很小。

“热代码”是可伸缩的、编写良好的代码

“热点”是一个活跃的区域。它们是热点,因为它们是频繁执行的代码。

热点的一个定义是程序计数器花费大量时间的代码区域。 一个相关的术语是“瓶颈”,它虽然定义不清,但通常是指局限于函数、例程或方法的代码,这会导致花费的时间超过必要的时间

这两个术语都具有误导性,因为存在一个巨大的不成文假设。 假设不存在加速非热点或瓶颈项目的机会。 加速机会可能比这更分散,如果找不到并修复它们,它们将成为性能限制器

让我举个例子。 最近,在一个大约300行的C++程序上,我用了十,因为我想看看我如何加快速度。 其中四张堆叠快照如下所示:

CTypedPtrArray<CPtrArray,COperation *>::operator[]() line 1555 + 23 bytes
TcProcess() line 246 + 14 bytes ---> COperation* pOp = oplist[i];
CMhAck::Handler() line 165
doit() line 297 + 12 bytes
main() line 318

CTypedPtrArray<CPtrArray,CJob *>::operator[]() line 1555 + 23 bytes
SchProcess() line 212 + 14 bytes ---> pJob = joblist[i];
COpAck::Handler() line 145
doit() line 297 + 12 bytes
main() line 318

CTypedPtrArray<CPtrArray,CTask *>::operator[]() line 1555 + 23 bytes
TcProcess() line 249 + 18 bytes ---> pTask = pOp->tasks[pOp->iCurTask];
CMhAck::Handler() line 165
doit() line 297 + 12 bytes
main() line 318

CTypedPtrArray<CPtrArray,CTask *>::operator[]() line 1555 + 23 bytes
COperation::~COperation() line 57 + 15 bytes ---> CTask* p = tasks[i];
COperation::`scalar deleting destructor'() + 37 bytes
TcProcess() line 259 + 28 bytes
CTskAck::Handler() line 193
doit() line 297 + 12 bytes
main() line 318
ctypedptraray::operator[])行1555+23字节
TcProcess()行246+14字节-->COperation*pOp=oplist[i];
CMhAck::Handler()第165行
doit()行297+12字节
主线318
CTypedptraray::运算符[]()行1555+23字节
SchProcess()行212+14字节-->pJob=joblist[i];
COpAck::Handler()第145行
doit()行297+12字节
主线318
CTypedptraray::运算符[]()行1555+23字节
TcProcess()行249+18字节-->pTask=pOp->tasks[pOp->iCurTask];
CMhAck::Handler()第165行
doit()行297+12字节
主线318
CTypedptraray::运算符[]()行1555+23字节
COperation::~COperation()行57+15字节-->CTask*p=tasks[i];
COperation::`scalar deleting destructor'()+37字节
TcProcess()行259+28字节
CTskAck::Handler()行193
doit()行297+12字节
主线318
这个节目总共花了20秒。 这些堆栈示例告诉我,大约40%的时间(即8秒)花在数组类的索引操作符上。 这告诉我,如果我能更直接地进行索引,而不是通过函数调用,我可以将运行时间从20秒减少到12秒。 加速比为20/12=1.67,或大约67%的加速比。 (注意:说到计时,我对“精确”一点也不在乎。我想做的是找出问题所在。)

现在人们可能很容易不同意这种解决问题的方法,但是你可以看到我是如何发现问题的,对吗

好的,那么“热点”和“瓶颈”在哪里? 显然,索引运算符函数中存在一个热点,但这就是问题所在吗? (事实并非如此,因为它有三种不同的功能。) 这是不是意味着我应该试着加快这一程序? 我甚至都不拥有它

是否存在某种“慢节奏”形式的瓶颈? 不 没有特别慢的例程,也没有“糟糕的算法”

我所做的是描述它在做什么(“它在某些例程中建立索引”),其中该描述大部分时间都适用

对于这些事情,我能想出的最好的术语是“时间流失”,因为它花费了大量的时间去做那些实际上不需要做的事情

阅读定义:

通过

处理它我的假设是您已经对术语“样板”有了足够的定义。我可能希望通过一个例子来支持你的观点。
来自Java背景,最近转向Scala,您意识到在Java中,您不能编写没有分号(;)的语句。此外,为一个可能正在生产环境中运行的程序编写数千条语句并不罕见。您的猜测和我的一样好,您最终编写了大量重复的低影响代码,但这恰好是Java编译器所要求的代码。Scala是一种简洁的语言,因为编写样板代码的需求已经减少。您不必用Scala编写分号。希望这足够简单

这是程序员的问题?