1.理解的JVM内存结构
2.对于垃圾回收问题
垃圾的回收只在堆和永久区(方法区)中,因为对于线程而言,私有存储空间如栈、本地方法区、程序计数器等,会随着方法的加载完成而直接释放空间,因此不需要进行垃圾回收。对于公共空间来说如堆和永久区,需要垃圾回收器参与,自动去收集垃圾,当然手机垃圾过程中,会stop the worl。需要合理做出一些判断,有时候需要在程序代码中进行单独表明。如下图所示问题:
问题是在判断用户请求是否超时情况下,恰好发生了垃圾回收,并且垃圾回收时间超过设置接口超时时间,导致走到请求失败逻辑判断中。
代码层面的解决方案,增加一个判断逻辑,判断当前执行时间到下一秒执行是否大于1秒(因为没有代码逻辑,实际执行速度会很快),如果执行大于,则增加stop the world时间的判断。
JVM性能调优方面,寻找为何会出现垃圾回收这么长时间的 原因了。