如果我想成为Java应用程序和系统的性能顾问,我需要哪些主要技能?
你是否同意这些的重要性?还有什么要补充的?
答案更新:
额外的技能:
心态(由几个答案提供,虽然我没有要求):
我目前有一个django网站,它有点慢,所以我想了解发生了什么.我如何对其进行分析以区分:
当然,对于其中一些我可以使用firebug,但是一些效果是相关的(例如,javascript可能看起来很慢,因为它正在进行慢速网络访问)
谢谢
Greets-
我们在工作中使用了一些喜欢使用的疯子
while(true) { //Code } 
在他们的代码中.你可以想象这会最大化CPU.有没有人知道降低CPU利用率的方法,以便其他人也可以使用服务器.
代码本身只是不断地在互联网上轮询网站上的更新.因此,我想一点睡眠方法会大大降低CPU使用率.
所有操作都在String对象(Java)中进行,任何人都知道StringBuilders会减少多少?
谢谢你的任何指示
我一直在研究JavaScript性能.我已经了解到,在不止一次访问时,通常最好将闭包变量和类成员复制到本地范围以加快速度.例如:
var i = 100;
var doSomething = function () {
    var localI = i;
    // do something with localI a bunch of times
    var obj = {
        a: 100
    };
    var objA = obj.a;
    // do something with objA a bunch of times
};
我理解这一点; 它为解释器添加了一个快捷方式,用于按名称查找值.在处理方法时,这个概念变得非常不清楚.起初,我认为它会以同样的方式工作.例如:
var obj = {
    fn: function () {
        // Do something
        return this.value;
    },
    value: 100
};
var objFn = obj.fn
objFn();
// call objFn a bunch of times
事实上,这根本不起作用.访问这样的方法会将其从其范围中删除.当它到达this.value行时,这指的是window对象,this.value可能是未定义的.我可以使用objFn.call(obj)将其范围传回到它中,而不是直接调用objFn和丢失范围,但这是否比原始的obj.fn()更好或更差?
我决定写一个脚本来测试这个,我得到了非常令人困惑的结果.该脚本对多个测试进行迭代,这些测试循环执行上述函数调用多次.每次测试所花费的平均时间输出到身体.
使用许多简单方法创建对象.额外的方法用于确定解释器是否必须更加努力地找到特定方法.
测试1简单地调用this.a(); …
有没有比使用C++列表容器的比较运算符更有效地按字节比较数据的方法?
我要比较[大?10 kByte <size <500 kByte]按字节数量的数据,以验证外部存储设备的完整性.
因此,我按字节顺序读取文件并将值存储在无符号字符列表中.此列表的资源由shared_ptr处理,因此我可以在程序中传递它,而无需担心列表的大小
typedef boost::shared_ptr< list< unsigned char > > = contentPtr;
namespace boost::filesystem = fs;
contentPtr GetContent( fs::path filePath ){
 contentPtr actualContent (new list< unsigned char > );       
 // Read the file with a stream, put read values into actual content
return actualContent;
这样做了两次,因为文件总是有两个副本.必须比较这两个文件的内容,如果发现不匹配则抛出异常
void CompareContent() throw( NotMatchingException() ){
 // this part is very fast, below 50ms
 contentPtr contentA = GetContent("/fileA");
 contentPtr contentB = GetContent("/fileB");
 // the next part takes about 2secs with …我想在Java VisualVm(版本1.7.0 b110325)中过滤哪些类是cpu-profiled.为此,我尝试在Profiler - > Settings - > CPU-Settings下将" Profile only classes "设置为我的测试包,这没有任何效果.然后我尝试通过在" 不要分析类 "中设置它们来摆脱所有java.*和sun.*类,这些类也没有效果.
这只是一个错误吗?或者我错过了什么?有解决方法吗?我的意思是:
我想这样做主要是为了获得每个方法消耗的CPU的正确百分比.为此,我需要摆脱烦人的测量,例如sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run()(约70%).很多用户似乎都有这个问题,例如
动机:我不能让google cpu profiler在代码运行的机器上工作(我的最后一口气我诅咒libunwind :)),所以我想知道gdb是否支持高频随机暂停程序执行,存储函数的名称发生中断并计算它在函数x中暂停的次数.这就是我所谓的"运行时采样",可能有更精确/更智能的名称.我查看了oprofile,但它很复杂到a)弄清楚它是否可以做到这一点b)弄清楚如何做它编辑:显然正确的名称是:"统计抽样方法"
编辑2:为什么我为此提供赏金的原因是我在SO上看到一些人推荐手动中断10-20x并用bt检查堆栈...当谈到时间时似乎非常浪费,所以我猜测一些智能ppl自动化它.:) 
EDIT3:gprof不会削减它...我最近在ARM系统上尝试运行它并且输出是垃圾...... :(我猜它多线程的麻烦就是这个原因......
我有一个多线程的应用程序,可以很好地扩展,但在16-cpu服务器上运行,一旦我超过5或6个硬件线程,性能水平关闭.我怀疑瓶颈围绕着其中一种同步方法.但是,在开始深入研究代码并尝试用非阻塞算法替换算法之前,我需要确定这是一种有罪的方法.
使用-Xprof参数运行Java 告诉我,正如我预期的那样,线程大部分时间都被阻塞了.有没有办法让我可以分解他们花在特定方法上的时间?
我一直在 GC 日志中看到非常长的应用程序暂停,这些暂停似乎与垃圾收集无关。该应用程序位于 16GB 堆上,分配的内存吞吐量非常大。我知道 GC 日志会显示与 GC 不一定相关的暂停,这里似乎就是这种情况。
此外,在这些暂停期间,CPU 达到 100%,没有磁盘或内存 I/O,也没有日志记录活动(由于所有应用程序线程都被停止)。
关于什么可能导致这些长时间停顿的任何想法,或者关于如何追踪根本原因的任何建议?
这是日志中的相关片段(注意 151 秒的暂停):
2015-04-21T06:30:04.834-0500: 217179.483: [GC (Allocation Failure)2015-04-21T06:30:04.849-0500: 217179.483: [ParNew
Desired survivor size 43614208 bytes, new threshold 6 (max 6)
- age   1:   19876896 bytes,   19876896 total
- age   2:   15903904 bytes,   35780800 total
- age   3:     617120 bytes,   36397920 total
- age   4:      34096 bytes,   36432016 total
- age   5:     399896 bytes,   36831912 total
- age   6:      71112 bytes,   36903024 total
: 706301K->45145K(766784K), 0.0681632 secs] …我正在尝试分析经常在数据库和休息调用中阻塞的情况。该代码不受 cpu 限制。以下示例 junit 方法应该可以说明该问题:
@RepeatedTest(10)
void fast() throws InterruptedException {
    Thread.sleep(100);
}
@RepeatedTest(10)
void slow() throws InterruptedException {
    // imagine a slow database or rest call or any other blocking code
    Thread.sleep(1000);
}
我正在使用 IntelliJ 和 Java Flight Recorder。我预计该方法fast将使用大约 10% 的执行时间,而该方法slow将使用大约 90% 的执行时间。但它们根本没有被报告,因为它们不占用 CPU 时间。
如何分析实际执行时间(包括阻塞代码中的等待时间而不仅仅是 CPU 时间)?
java ×6
performance ×5
profiling ×5
c++ ×1
call ×1
comparison ×1
containers ×1
cpu-usage ×1
django ×1
gdb ×1
javascript ×1
jfr ×1
jvisualvm ×1
memory ×1
methods ×1
object ×1
profiler ×1
stl ×1
synchronized ×1
visualvm ×1