static能大量用么?

今天碰到一个问题:static能大量用么?无论是修饰变量,还是修饰方法(method)。
在我看来,static不能用来大量修饰方法,因为我觉得static用多的话,占用内存多。但是有人有另外一个意见:static能提高速度,对内存无影响。
不知道大家如何看这个问题?

该用时才用,而不是为使用而用.

什么时候改用?
我碰到一个人的代码,他将类中大量的方法定义为static。我问他为什么,他说这样速度快,好。
我想知道大量用static,将来运行的时候是不是很耗内存。

会影响内存的。不要什么都用STATIC来定义

确实是系统固有的行为和对象,用之。重要的是要考虑清楚,是否是固有的。

大部分时候,我们不用讨论static是否影响效率,而应该是这确实客观反映了系统的本来面貌否。

static使用需要和多线程概念联系起来,过分使用Static会导致系统单线程运行,整个系统性能大幅度降低,使得你都无法定位性能问题。

我曾经碰到过一个游戏系统,由于大量使用static 和singleton,导致单线程,速度太慢了。注意:对于一些初学者,单线程开发是最方便的,这也是没有架构设计原因导致的,这样的项目必然失败。

static的作用和上边几位说的有什么联系吗?大家还是好好看一看java语法吧,用错位置的话程序逻辑上都不会正常跑起来的!

static方法的问题我前面有帖子详细讨论过,搜索一下。

static方法本身不会影响性能,笼统的来说,由于不需要new对象,也不需要隐式传递对象引用,因此内存消耗少,执行速度快。

但是由于static方法调用本身是不访问对象的,因此方法内部不能够使用非静态的属性,如果你不管三七二十一乱用static方法,必然会造成定义大量的静态属性,这样反而会造成内存消耗大,对象之间偶合性非常高的问题。

因此是否采用static方法不取决于内存消耗和执行效率,而是取决于你的业务逻辑。笼统的来说,如果对象是有状态的,那么需要new一个对象,方法不是静态的,如果对象是无状态的,那么使用静态方法,把类的静态方法当做函数调用来使用。

如果你的项目用了大量的STATIC,那么你的设计思路一定有问题!

我看到ofbiz就使用了大量的static方法啊

banq能否解释一下为什么static方法用多了会产生单线程执行的问题?

如果不用static方法,频繁创建对象、频繁回收的成本如何计算?

我们的项目中现在就遇到了这样的一个问题。非同步的静态方法

也会导致单线程么?

/*
static方法本身不会影响性能,笼统的来说,由于不需要new对象,也不需要隐式传递对象引用,因此内存消耗少,执行速度快。


如果你的项目用了大量的STATIC,那么你的设计思路一定有问题!
*/

一般来说是这样子的(除非你的设计差到不行)。从面向对象的观点说,根本就不应该有static method,他的存在就是为了快速函数调用

static 会导致单线程??,不是吧??

singleton,导致单线程??
synchronized method??

singleton 主要是把业务逻辑分发出去,有点类似action,不应该造成单线程阿

在静态方法内部只要没有用到静态成员变量的话,就不会有多线程的问题,同理singleton也是如此,banq说的情况估计是设计失误。static方法一般用于设计一些通用的Helper类,以节约内存,提高速度,不适宜放在有业务意义的类里面,因为会让人觉得跟面向对象的原理有所违背,但如果为了方便不想用Helper类而直接写在业务类里也是无可厚非的。


> singleton
> 主要是把业务逻辑分发出去,有点类似action,不应该造成单
> 叱贪?>

分发业务逻辑???
请参考singleton的定义:


public class Sn {
private static Sn ourInstance;

public synchronized static Sn getInstance() {
if (ourInstance == null) {
ourInstance = new Sn();
}
return ourInstance;
}

private Sn() {
}
}