0

我曾经用spring状态机开发过一个游戏,在高峰期,它会创建大约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
4

1 回答 1

2

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

于 2017-06-25T13:32:01.310 回答