谁能告诉我的javacore,线程转储和堆转储之间的确切区别? 根据该情况每个这些被用来??
Answer 1:
线程转储是所有活动线程的堆栈转储。 用于分析应用程序是什么最多在某个时间点因此是有用的,如果间隔在诊断某些类型的“执行”问题(例如线程死锁),方便的完成。
堆转储是Java堆内存的状态转储。 分析有什么用内存的应用程序在某个时间点在诊断一些内存的问题,以便使方便实用。因此,如果在间隔诊断内存泄漏得心应手完成。
这是他们在“原始”方面的东西,并能以多种方式来提供。 一般用来描述的JVM和应用服务器倾倒文件,并以这种形式,他们是一个低级别的工具。 有用的,如果由于某种原因,你不能得到任何东西,但你会觉得生活更简单。使用像样的分析工具以获得类似,但更容易剖析信息。
对于到WebSphere一个javacore文件是一个线程转储,尽管有很多其他的信息,如锁和装载类和一些有限的内存使用信息,以及PHD文件是一个堆转储。
如果你想读一个javacore文件,你可以手工做,但有一个IBM工具(BM线程和监视器转储分析器),这使得它更简单。 如果你想读一个堆转储文件需要的很多IBM工具之一:MDD4J或堆分析。
Answer 2:
JVM头转储是在给定的时间内JVM堆内存的快照。 因此,它只是JVM的堆表示。 这是对象的状态。
JVM线程转储是在给定的时间JVM线程的快照。 所以,那是什么是线程在任何给定的时间做。 这是线程的状态。 这有助于理解诸如锁的线程,忌用线程和运行的线程。
头自卸具有比线程转储Java类级别信息的详细信息。 例如头转储是很好的分析JVM堆内存的问题和错误的OutOfMemoryError。 当出现类似的OutOfMemoryError已经发生JVM头转储是自动生成的。 堆转储可以手动通过杀死使用kill -3的过程来创建。 产生堆转储是密集型计算任务,这可能会挂掉你的JVM。 所以itsn't一个methond到offetenly使用。 堆可使用诸如存储器蚀分析器工具进行分析。
核心转储是对象的操作系统级别的内存使用情况。 它比头转储更多情报。 当我们故意杀死一个进程核心转储不创建。
Answer 3:
堆转储任何时候你希望看到外的内存错误堆转储什么是存储正在举行-图片的内存中的对象-用于内存分析的Java核心-也被称为线程转储或Java转储,用于查看线程活动在给定时间在JVM内部。 IBM了Javacores应该有很多的附加信息除了刚才线程和堆栈 - 用来确定挂起,死锁和性能下降系统核心原因
Answer 4:
线程转储是所有线程的堆栈跟踪,即如同每个线程突然抛出异常和printStackTrace'ed是转储。 这是这样,你可以看到每个线程在一些特定点做的,例如是很好赶上死锁。
堆转储是“二进制转储”的JVM使用完整的内存,如果你需要知道你为什么运行内存是有用的,例如 - 在堆转储例如,你可以看到,你有一十亿用户对象,即使你只能有一千个,它指向一个记忆保留的问题。
Answer 5:
线程转储是在JVM运行的线程的javacore显示快照,它是挂的问题进行调试是有用的,它会提供有关Java级别死锁还了Javacores的IBM版本提供了更多有用的信息,如堆使用,每个CPU使用信息螺纹与由JVM laded类号一起整体堆的使用情况。
Heapdumps,提供关于由JVM,其可用于调试内存泄漏Java堆的使用信息。 Heapdumps由IBM JVM中,当JVM是运行到OutOfMemoryError异常产生,Heapdumps仅在Java堆泄漏,本机内存不足的错误可能导致系统以“GPF”一般保护故障转储一般。