我有一个Java程序,它创建了大约12个长度为1.6亿的数组。这些数组包含原始数据类型(char、short和float)。在我的算法中,我通过jprofiler发现GC在我的系统上运行得相当频繁(Google Cloud上的Windows VM机器,16个CPU核心,64GB RAM),但我无法弄清楚为什么GC会如此经常地运行并占用总计算CPU功率的80%。
因此,我想:如果我能找出(通过jvm命令/日志或最好是通过像jprofiler这样的分析器)精确哪些对象被“垃圾回收”,我就有可能了解到发生了什么,要么修复简单问题,要么根据更好的理解重新设计。 (据我所知,我已尽量减少对象创建;虽然我确实使用了很多jdk8并行流特性,但我不知道是否会导致GC问题。)是否有一种方法可以确定GC在任何特定时间正在尝试清理哪些对象(或哪些对象类型),以便我更好地了解GC为什么会如此频繁且如此努力地运行?
因此,我想:如果我能找出(通过jvm命令/日志或最好是通过像jprofiler这样的分析器)精确哪些对象被“垃圾回收”,我就有可能了解到发生了什么,要么修复简单问题,要么根据更好的理解重新设计。 (据我所知,我已尽量减少对象创建;虽然我确实使用了很多jdk8并行流特性,但我不知道是否会导致GC问题。)是否有一种方法可以确定GC在任何特定时间正在尝试清理哪些对象(或哪些对象类型),以便我更好地了解GC为什么会如此频繁且如此努力地运行?