我将使用JProfiler和日食Tptp对java应用程序进行工作坊分析、性能调优、内存分析、内存泄漏检测等我需要一套可以提供给参与者的练习:使用工具来分析发现的问题:瓶颈、内存泄漏、不优化的代码等等。我确信我们有丰富的经验和现实生活中的例子。
问题和解决办法不应过于复杂;最多只能在几分钟内解决这些问题,最坏的情况则是几个小时的问题。一些令人感兴趣的活动领域:
理想情况下,练习应该包括示例未优化代码和解决方案代码。
发布于 2010-08-12 07:58:47
我试图找到我在野外所见过的真实生活中的例子(也许略有改变,但基本问题都是非常真实的)。我还尝试将它们聚集在相同的场景中,这样您就可以轻松地构建一个会话。
场景:您有一个耗时的函数,您想要对不同的值执行多次,但是相同的值可能会再次弹出(理想情况下,在创建它之后不会太久)。一个很好的简单的例子是您需要下载和处理的url页面对(对于这个练习,它可能应该是模拟的)。
循环:
内存泄漏:
WeakHashMap实现上一个缓存,其中键是URL (而不是字符串,请稍后参阅),值是包含URL、下载页面和其他内容的类的实例。您可能会假设它应该很好,但实际上并非如此:因为值(不是弱引用的)有对键( URL)的引用,所以该键永远不会有资格清除->漂亮的内存泄漏。
解决方案:从值中删除URL。对象创建和字符串:
并发性:
奖金练习:
在开始时填充缓存,之后不要做太多的分配,但是在某个地方仍然有一个小漏洞。通常这种模式不太容易捕捉。您可以使用分析器的“书签”或“水印”特性,它应该在缓存完成后立即创建。
发布于 2010-08-04 14:38:19
不要忽视这种方法,因为它适用于任何语言和操作系统,适用于这些原因。这里就是一个例子。此外,尝试使用具有I/O和重要调用深度的示例。不要只使用像Mandelbrot这样的小型cpu绑定程序。如果您以这个不太大的C示例为例,并使用Java对其进行重新编码,那么这将说明您的大部分观点。
让我们看看:
在任何情况下,它都不能得到足够的强调,在证明某件事情需要大量时间之前,不要做任何优化。
发布于 2010-08-10 07:04:50
我使用JProfiler来分析我们的application.But --没有多少help.Then,我使用了JHat.Using JHat --您无法看到真正的time.You中的堆必须进行堆转储,然后进行分析。使用对象查询语言是查找堆泄漏的好方法。
https://stackoverflow.com/questions/3406286
复制相似问题