我在JVM中总是在应用程序的大致相同阶段收到段错误,但在崩溃报告中堆栈跟踪不同。然而,它似乎总是发生在GC期间。
由于崩溃发生在我尝试过的三个JVM(OpenJDK 6、Oracle 1.6.0_25和1.7.0)以及每个JVM使用的两个GC(Parallel Collector和CMS)中,并且它发生在应用程序的大致相同区域,我想,如果我能找到GC正在尝试收集的内容,我可能会发现我的代码中存在某些异常情况导致崩溃。
- 有哪些编码实践被广泛认为对GC有问题?
- 有哪些方法可用于诊断此问题?
- 我能否就触发此问题的应用程序位置进行任何猜测?
- 可以尝试调整哪些(GC调整)参数以缩小问题范围?
- 是否有一种方法可以在堆转储中找到(可能)存在问题的数据?