jjzjj

profiling

全部标签

java - 比较 java 内存堆转储 : Memory profiling for Java desktop application

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。这是一个更具体的问题,需要跟进anotherquestionthatIhaveaskedrecently.此问题的正确答案也将获得前一个问题的正确答案(因为它仍处于不确定状态)!基本上,我有一个存在内存泄漏问题的Java桌面应用程序。我正在使用NetbeansIDE中的内存分析器来分析内存问题。这些是我到目前为止已采取的步骤:将新的内存分析器附加到Netb

java - jprofiler 或其他 : how do I roll up recursive method calls?

我有一个很长的操作,我想在JProfiler(或其他建议)中进行分析,但该方法非常递归,因此CPUView中的TreeView没有太大帮助。它向我显示了这样的CPU时间:beginOperation100%|-recursiveMethod99%||-recursiveMethod98%|||-recursiveMethod97%||||-...morerecursion|||-otherMethods1%||-otherMethod1%|-otherMethods1%您看,recursiveMethod确实根本不需要任何时间。相反,它占用时间的是otherMethods,并且是我想要

Java:内存分析器工具 (MAT) 用法:比较两个 heapdump

我正在使用Eclipse+MAT插件。我可以看到一个.hprof文件堆历史记录,我拍摄了我的Java应用程序的两个快照。我希望当我比较两个堆转储时,我可以找出哪些对象实例增加了很多,以便我可以识别内存泄漏的可能性。netbean可以做到吗? 最佳答案 说明打开MAT中的两个堆转储打开显示异常行为的堆转储的直方图(通常是内存或线程使用率较高的堆转储)。将它与另一个堆转储进行比较从列表中选择合适的堆转储解读结果类名:在应用中实例化的类,占用内存对象:在其他堆转储上方或下方存在的类实例的计数。浅堆:给定类在内存中占用的字节数高于或低于其他

Java JAR 内存使用 VS 类文件内存使用

我最近将我的大型Java应用程序更改为以JAR而非单个类文件的形式交付。我有405个JARS,其中包含5000个类文件。我的问题是,当我将程序作为JAR运行时(类路径是获取所有JAR的通配符),Java将不断使用越来越多的内存。我已经看到内存超过2GB,而且Java似乎没有执行停止世界的垃圾收集来降低内存。如果我针对展开的JAR(仅类文件)运行完全相同的程序,Java的内存使用率会低得多(类路径中的JAR文件类路径中的类文件编辑:我接受了@KErlandsson的回答,因为我认为这是最好的解释,而这只是Java的一个丑陋的怪癖。感谢大家(尤其是@KErlandsson)的帮助。

java - 开发javaagents时如何运行测试?

我正在尝试摆弄Foursquare'sHeapAudit,并尝试使用IntelliJIDEA进行设置。使用pom.xml中的依赖项,我设法让它构建得很好。但是,当我实际尝试运行JUnit测试时,基本上所有测试都失败了。我猜这是因为使用HeapAudit需要JVM作为-javaagent启动,根据github:$java-javaagent:heapaudit.jarMyTest如果我放入此行并引用我之前下载/构建的heapaudit.jar,大概测试会通过。但是,在我看来,如果我更改源代码,我将需要重新打包这个愚蠢的.jar文件以查看它是否有效。是否有任何方法可以使用-javaagen

java - 是否有工具可以在不加载完整 hprof 文件的情况下分析大型 Java 堆转储?

我使用EclipseMAT来分析hprof文件。这非常好,但如果您有2Gb的堆转储,那么您需要运行具有2Gb+堆大小的MAT才能加载完整的堆转储。我想知道是否有人知道可以分析2Gbhprof文件的工具,而无需本身使用那么多内存(例如,它不会加载完整的文件,但会以某种方式遍历它)?如果在客户服务器上生成hprof文件,这将很有用,因为我可以在服务器上运行一些分析,而不是尝试通过VPN复制2Gb文件。 最佳答案 hprof文件的格式如果不完全加载然后应用一些交叉引用就不能很好地工作。但是,您可以使用jmap跳过hprof转储以从正在运行

java - 如何自动将 JVisualVM 附加到短期程序?

简要阅读教程并使用JVisualVM,我可以手动将它附加到长时间运行的服务器或Swing应用程序,但我也想将它用于运行时间不到一秒的短程序。我想我可以让我的程序在控制台上阻塞,附加JVisualVM,然后按下一个键让程序执行它的实际工作。是否有更简单的解决方法?(这主要是出于我自己的好奇心,如果使用像JVisualVM这样完善的GUI而不是-Xprof或HPROF会很好)。 最佳答案 如果您使用的是eclipse,则可以在Debug模式下使用“Stopinmain”选项并将以下行作为参数添加到您的进程中-Dcom.sun.manag

Java 分析 : detect which piece of code causes high CPU load

我使用JProfiler和YourKit分析了我的代码。但是,我一直无法弄清楚如何检测哪段代码导致高CPU负载。如果响应时间很差,检测热点是微不足道的。就我而言,虽然响应时间不是问题。只是在处理此特定请求的短时间内,CPU负载确实很高(高得惊人)。我如何确定是哪个类/方法导致了这个问题?我想我正在寻找的是某种列表,它告诉我处理一个方法所需的CPU周期数-左右。 最佳答案 CPU负载本质上表示cpu有事情要做的cpu周期数,而不仅仅是摆弄虚拟拇指。因此,如果您的请求确实在进行实际工作(而不是等待磁盘I/O),那么在工作完成时负载会变高

java - 单行字符串连接的速度差异

所以我一直leadtobelieve使用“+”运算符在一行中追加字符串与使用StringBuilder一样高效(而且绝对更美观)。今天,虽然我在使用append变量和字符串的记录器时遇到了一些速度问题,但它使用的是“+”运算符。所以我做了一个快速testcase令我惊讶的是,我发现使用StringBuilder更快!基础知识是我使用4种不同的方法(如下所示)对每个追加次数平均使用20次运行。结果,时间(以毫秒为单位)#ofAppends10^110^210^310^410^510^610^7StringBuilder(capacity)0.651.25211.7117.651213.2

java - 生产中的 VisualVM?

我考虑运行VisualVM与生产JVM对比,看看那里发生了什么——由于某种原因,它开始消耗过多的CPU。它不能导致JVM故障,所以我正在尝试估计所有风险。我在他们的site上看到的唯一问题这可能会降低JVM与类共享和-XshareJVM选项有关,但afaik类共享在服务器模式和/或x64系统上未启用。那么针对生产JVM运行VisualVM真的安全吗?如果不是——应该考虑哪些风险,以及针对JVM运行VisualVM(并使用它进行分析)有多少负载(CPU/内存)戴上了吗?谢谢 最佳答案 AFAIKVisualVM可以在生产中使用,但我只