【性能测试】:记一次性能调优过程
1,性能压测情况:单交易50,100和200用户压测场景中,发现该交易很稳定的大概有5%左右的失败率,
2,后台根据流水号分析日志:
发现失败的交易,均提示一个时间字段上传的结果为空,故而导致交易失败;
95%的交易都成功,该时间字段都有值;
3,审查代码发现,该交易上送了多个字段,只有该时间字段是静态变量static定义来保存的,后定义为一个局部变量来存储该字段,解决问题,交易成功率100%。
原因分析:
栈内存:存储的都是局部变量,该变量有自己的作用域,一旦离开作用域,变量就会被释放。栈内存的更新速度很快,因为局部变量的生命周期都很短。
堆内存:存储的是数组和对象(其实数组就是对象),凡是new建立的都是在堆中,堆中存放的都是实体(对象),实体用于封装数据,而且是封装多个(实体的多个属性),如果一个数据消失,这个实体也没有消失,还可以用,所以堆是不会随时释放的,但是栈不一样,栈里存放的都是单个变量,变量被释放了,那就没有了。堆里的实体虽然不会被释放,但是会被当成垃圾,Java有垃圾回收机制不定时的收取。
方法区:又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。