【发布时间】:2015-03-24 09:58:28
【问题描述】:
我目前正在为大学做一个新项目,并且很好奇处理我创建的用于执行实用程序操作(例如散列密码)的类的最佳方法。
实用程序类是否应该包含静态方法,以便我将它们称为
Utilities.hashPassword(password,salt);
或者我应该为每个调用创建一个新实例
new Utilities().hashPassword(password, salt);
现在,对于该类中的函数的每次调用,我都有一个新实例,但我担心这对性能的影响,我想知道它是否甚至有必要这样做。
我最初实例化它们的原因是因为我不确定线程安全是如何工作的,并且担心多个用户调用同一个静态函数会导致问题。在阅读了一些关于 Java 并发的材料后,我现在很确定即使该方法是静态的,它也是线程安全的。
我应该将它们全部更改为静态方法吗?这会提高性能吗?现在我的测试服务器在负载下崩溃了。
谢谢
【问题讨论】:
-
你在你的服务器上做什么样的负载平衡?
-
所有方法都是静态的,并将构造函数设为私有,以确保它不能被实例化
-
尽可能避免使用实用程序类:它们很痛苦。
new Utilities().hashPassword(password, salt);很容易成为:new PasswordHasher().hashPassword(password, salt);。然后你就有了一个职责明确的好班级:不是垃圾场。 -
如果没有看到确切的案例和适当的测量,我显然无法确定,但如果实用程序类的实例化导致如此多的额外负载,我会感到非常惊讶。 (有可能,我已经看到了,但通常还有其他原因。)
标签: java performance concurrency