从内存分配的角度来看,创建无状态静态实用类与无状态非静态实用类有什么区别吗?根据我的理解,静态类可能实际上会更好,因为在GC堆上不会分配对象。只有方法表将在高频堆上创建,而对于非静态类,将在GC堆上与HF堆上的方法表一起创建一个对象。需要你们的帮助来确认它,并请告诉我是否缺少其他考虑因素。实用程序/助手无状态静态类vs无状态非静态类
4
A
回答
4
是的。如果这些方法都是静态的,那么没有实例将在托管堆上。每次调用时,都会直接引用该类型并访问它的成员,而无需在堆上分配内存。
如果您有一个实例类,那么每次创建实例时,都会在堆上产生成本。如果你还没有坚持引用,那么你将在CLR的第0代产生高流失。这假定你将创建大量的对象来进行这些调用。
当然,如果您正在实施the singleton pattern,那么成本将会很小,因为您只需实施一个单个实例对象。
但是,这一切都没有实际意义,因为它是一个micro optimization;除非您发现自己创建了大量这些对象来执行此功能,并且通过分析确定您实际上存在问题,那么它应该是最简单的维护问题。
虽然我会说,如果一个方法是无状态的,它自然看起来像它将运行一个现有的类型,那么我通常会写一个extension method;它是一个静态的调用,但给出了一个实例调用的外观,这对于一些(和我本人而言)在代码中具有比直接调用静态方法更好的流程(尤其是当它使我能够设计fluent interface时)。
+0
非常感谢!扩展方法绝对是实现帮助器方法的更好方法。 – jags 2012-08-15 19:49:50
相关问题
- 1. 静态与非静态类
- 2. 无状态EJB中的静态vs实例成员
- 3. 从静态类触发非静态类?
- 4. 访问非静态类的静态类
- 5. Combinig静态类和非静态类
- 6. Java:非静态类和静态调用
- 7. C#静态类 - 静态类不能有非静态成员
- 8. 无法对非静态类成员进行静态引用
- 9. 无法对非静态类型进行静态引用T
- 10. 静态主类静态类?
- 11. c#静态或非静态类
- 12. 声明非静态类静态
- 13. 声明类的静态和非静态
- 14. 静态形状
- 15. 无状态的饼干VS全状态
- 16. Keras - 有状态vs无状态LSTM
- 17. 想从非静态类访问静态成员的非静态子类的Java
- 18. Android的静态VS非静态问题
- 19. 静态文件状态'404
- 20. 如何序列化非静态子类的静态类
- 21. 静态类vs单身类
- 22. 静态新手:静态类/方法中的非静态变量是否意味着静态?
- 23. 单身和静态实用程序类
- 24. 单型态VS静态类型
- 25. 单链表 - 无法对静态类型进行静态引用
- 26. 无法对静态类型进行静态引用E
- 27. PHP - 设计无状态类
- 28. C#类实例的静态方法VS静态类的内存使用情况
- 29. 非静态类中的静态方法和静态类中的静态方法有什么区别?
- 30. 静态线程函数访问非静态类成员在C++
微。优化。 – Oded 2012-08-15 19:00:12
确实......你需要做多少个非静态类的实例化? – spender 2012-08-15 19:09:18
@spender:这是我认为需要建议的地方。一个非静态类将不得不被实例化,以便访问任何成员,而静态类不会有这样的需求。一个非静态类可以实现为单例类,以避免多个实例,因为空对象会消耗12个字节的内存,但如果类由纯实用程序成员组成,那么这似乎不值得付出努力。 – jags 2012-08-15 19:36:54