Tag: 分析

分析Java堆转储时耗尽内存

我有一个奇怪的问题,我需要分析一个1.5GB大小的Java堆转储(来自IBM JRE),问题是在分析转储时(我已经尝试过HeapAnalyzer和IBM Memory Analyzer 0.5 )这些工具耗尽内存我无法真正分析转储。 我的机器里有3GB的RAM,但似乎还不足以分析1.5 GB的转储, 我的问题是,您是否知道我可以使用我拥有的内存量运行的堆转储分析(支持IBM JRE转储)的特定工具? 谢谢。

是否有工具来分析大型Java堆转储而不加载完整的hprof文件?

我使用Eclipse MAT来分析hprof文件。 这是非常好的但是如果你有2Gb堆转储,那么你需要运行具有2Gb +堆大小的MAT本身才能加载完整的堆转储。 我想知道是否有人知道一个工具可以分析2Gb hprof文件而不使用那么多的内存本身(例如它不加载完整的文件,但不知何故走过它)? 如果在客户服务器上生成hprof文件,这将非常有用,因为我可以在服务器上运行某些分析,而不是尝试通过VPN复制2Gb文件。

用java简单的情感分析

我对Sentiment分析很新。 如何判断给定的单词或句子是正面还是负面。 我必须用java实现它。 我试着阅读像lingpipe,rapidminer教程这样的东西,但我不明白。 在他们的例子中,他们使用了大量数据。 就我而言,我没有太多数据。 我要说的只是一个单词或一个句子。 我也尝试从stackoverflow中读取问题。 但他们对我帮助不大。 提前致谢。

吉他调音的频率检测

我打算实施一个移动吉他调谐器应用程序。 我做了一个初步的研究,发现了一些常用的音高检测方法,如快速傅里叶变换,自相关等。 我还发现FFT不是检测频率的非常好的机制。 由于该项目中有2个部分正在检测吉他弦的频率并将该频率与弦应该在的频率相匹配,我想到使用已经实现的类库来检测弦的频率。 我目前不知道这个项目有多难,所以我的问题是项目的哪个部分更难? 它是匹配2个频率还是检测字符串的频率? 还有一种方法可以使用FFT但同时获得字符串的准确频率。 感谢您的时间。

如何测量线程堆栈深度?

我有一个带有可伸缩性问题的32位Java服务:由于线程计数过多,用户数量很多,因此内存不足。 从长远来看,我计划切换到64位并减少每用户线程数。 在短期内,我想减少堆栈大小(-Xss,-XX:ThreadStackSize)以获得更多的空间。 但这是有风险的,因为如果我把它做得太小,我将得到StackOverflowErrors。 如何衡量应用程序的平均和最大堆栈大小,以指导我决定最佳-Xss值? 我对两种可能的方法感兴趣: 在集成测试期间测量正在运行的JVM。 哪些分析工具将报告最大堆栈深度? 寻找深度调用层次结构的应用程序的静态分析。 dependency injection的反思使得这不可行。 更新 :我知道解决此问题的长期正确方法。 请关注我问过的问题:如何测量堆栈深度? 更新2 :关于JProfiler的相关问题,我得到了一个很好的答案: JProfiler可以测量堆栈深度吗? (我根据JProfiler的社区支持建议发布了单独的问题)

为什么垃圾收集器没有比单个数字堆空闲%更快地进行更积极的垃圾收集?

这些是WebLogic 11g中的Sun Hotspot 1.6 JVM堆设置: -Xms10g -Xmx10g -XX:MaxPermSize=256m -XX:+UseParNewGC -XX:ParallelGCThreads=2 -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:ConcGCThreads=2 我在JVM堆免费%图表中看到的24小时基本上是无堆的%以较慢的速度下降,直到我们达到约9%(大约需要24小时)。 然后系统运行看起来像一个完整的gc并回到97%。 是否有一些我应该添加/修改的设置会告诉JVM比我们低于10%的堆免费更快地完成这个完整的GC? 例如一些比例设定? 它不会导致等待我们获得9%免费的问题,但它会使监控/警报变得更加困难。 理想情况下,我们希望始终保持高于30%的免费使用率,这样如果我们下降到那些单位数字,我们就知道存在某种问题,例如内存泄漏。

在Java应用程序中查找线程创建源

我正在研究一个有线程问题的Java应用程序。 在附加Netbeans Profiler的情况下使用应用程序一段时间后,我可以看到创建了几个线程。 他们中的大多数在.5 seconds完成。 我只能找到应用程序中使用的SwingWorkers。 此外,探查器显示的大多数线程是普通线程而不是SwingWorkers。 除非这些线程是间接由SwingWorker创建的,我怀疑,应用程序使用的某些库正在创建它们。 现在我想删除这个问题。 但我找不到确定线程创建源的方法。 如果你能提出一些其他的探查器/工具,我可以通过它找到线程创建的源( 方法 )。

寻找端到端Java CPU Profilers的建议

Java存在哪些好的端到端CPU分析器? 我正在寻找的快速列表: 脱机分析 – 程序执行期间无需用户交互或GUI。 将配置文件数据转储到文件然后需要使用GUI进行查看很好,我只是不想在工作运行时保管它 端到端记录 – 在进入J2SE应用程序的主要调用后,Profiler应该能够立即开始记录。 它应该在JVM退出之前立即停止录制。 调用图生成 – 在分析之后,将数据转换为可视调用图是很好的。 谷歌有一个很好的C / C ++剖析器 – http://google-perftools.googlecode.com/svn/trunk/doc/cpuprofile.html 如果Java的等价物存在,它正是我正在寻找的。 我没有在我的潜在剖析器列表中包含HProf,因为与我使用精确的CPU调用分析时看到的其他商业剖析器相比,它表现不佳(通常通过字节代码注入完成,这很慢,但HProf至少出现比其他分析器慢一个数量级,并且当单个采样配置文件运行需要1-2个小时时,对同一次运行等待超过一天是不可接受的)

Java图像分析 – 计算垂直线

我需要一点Java的图像分析算法的帮助。 我基本上有这样的图像: 所以,正如你可能猜到的那样,我需要计算一下。 你认为哪种方法最好? 谢谢,Smaug

Java应用程序中已加载类的数量可能发生内存泄漏

我最近开始分析我正在使用VisualVM编写的osgi java应用程序。 我注意到的一件事是,当应用程序开始向客户端发送数据时(通过JMS),加载的类的数量开始以稳定的速率增加。 然而,堆大小和PermGen大小保持不变。 即使在停止发送数据之后,类的数量也永远不会下降。 这是内存泄漏吗? 我认为是这样,因为加载的类必须存储在某个地方,但是即使在我运行应用程序几个小时之后,堆和permgen也不会增加。 有关我的分析应用程序的屏幕截图,请转到此处