春天状态机的记忆消遣

时间:2017-06-24 12:58:50

标签: spring-statemachine

我已经用弹簧状态机开发了一个游戏,在高峰时段,它会创建大约5000个状态机,每个状态机有大约25个状态。但是从性能测试中,我们注意到创建了很多对象,它消耗了内存并降低了gc性能。 对于我的选择,有一些对象是不可变的,如ObjectState,它可以重用于所有的状态机。但它是为每个人创建的。

这是弹簧状态机的性能问题吗?或者是我的误用?

10: 104192  10002432    org.springframework.statemachine.state.ObjectState
15: 208398  6668736 org.springframework.statemachine.support.OrderedCompositeItem
17: 397839  6365424 org.springframework.core.annotation.AnnotationAwareOrderComparator
18: 189440  6062080 org.springframework.statemachine.listener.OrderedComposite
26: 71040   4546560 org.springframework.statemachine.trigger.TimerTrigger
27: 89984   4319232 org.springframework.statemachine.transition.DefaultExternalTransition
30: 203648  3258368 org.springframework.statemachine.action.CompositeActionListener
42: 71040   1704960 org.springframework.statemachine.support.DefaultStateMachineExecutor$2
45: 104192  1667072 org.springframework.statemachine.support.AbstractStateMachine$4
46: 104192  1667072 org.springframework.statemachine.state.CompositeStateListener

1 个答案:

答案 0 :(得分:2)

你是对的,那些是为每台机器创建的。有趣的是,如果这些可以创建一次然后以某种方式在其他实例之间共享,因为它肯定会减少垃圾。你介意为此创建一个问题吗?