日期:2014-05-18  浏览次数:20988 次

JAVA类里的静态方法消耗内存吗?有同步问题吗?
我想把某个WEB项目里,所有操作数据库的方法都写成static的,
会有什么问题?

------解决方案--------------------
最好不要这么做..

数据库相关的操作,尽量用的时候去实例化,用完销毁。

一般的,实例化,就占内存,如果静态,那么就一直占用。
------解决方案--------------------
数据库连接的获取,本身就存在异常风险。

而且,你一旦全部静态,在数据操作很频繁的情况下,会存在并发问题。
------解决方案--------------------
探讨
"而且,你一旦全部静态,在数据操作很频繁的情况下,会存在并发问题。"
能具体举个例子吗?

------解决方案--------------------
所謂靜態方法,也叫類方法,應該是說不用實例化對象,就可以直接調用的方法,方法和內存應該沒有必然的關系吧,Java本身也提供了很多的工具類,也是提供一些靜態的方法。只要做好數據庫連接的管理,其他應該沒有什么問題吧。
------解决方案--------------------
只要你的静态方法不访问全局变量的话,就不会有并发问题
------解决方案--------------------
继承下同步接口.不过内存还是占的

软冰信息技术有限公司
急聘精通ssh有意者邮箱mxylon@gmail.com
------解决方案--------------------
探讨
只要你的静态方法不访问全局变量的话,就不会有并发问题

------解决方案--------------------
一般没有什么问题,但是要根据你自己实际的需求来写的。在有些特殊情况下,静态方法是有问题的。
------解决方案--------------------
不好,不信你就试试,
那样的话速度一定很慢
------解决方案--------------------
探讨
引用:
不好,不信你就试试,
那样的话速度一定很慢


你们给段很短的例程证明很慢?

------解决方案--------------------
楼主说得太简单
并发和静态不是很相关
多个人对同一个东西的使用肯定有并发问题
有没有并发关键看你怎么设计你的数据层

方法就是一段程序,什么程序都是消耗内存的。
静态变量常驻内存,说他消耗也可以
静态方法通常比非静态方法快
静态方法多为工具方法,就是说静态方法不引用外部资源所以编译更快。

所有操作数据库的方法 这句话不是很明白
操作数据库简单的就是,查询,插入删除,
这些方法需要数据库链接,楼主是想维护静态连接池呢还是不停打开链接呢

不推荐使用静态方法作数据库操作,因为数据库方法带有延伸性。
就是说一般静态方法都是得到数据,计算,返回数据
而数据库方法则是,得到数据,发到数据库,得到返回结果,返回数据。
直觉上就跟静态方法的名字冲突。不够清晰
------解决方案--------------------
我不知道楼主为什么要这么写
反正感觉
Java code

Connection con = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;

        try {
            con = DbConnectionPool.getConnection();

------解决方案--------------------
探讨
最好不要这么做..

数据库相关的操作,尽量用的时候去实例化,用完销毁。

一般的,实例化,就占内存,如果静态,那么就一直占用。

------解决方案--------------------
顶Landor2004.
个人认为, Java的静态方法访问数据库存在着并发问题的隐患, 但具体是否出现要看楼主怎么写代码, 在大部分情况下, 由于现在数据库软件做的比较完善, 并发问题不会导致数据库崩溃但可能造成某些存取出现问题. 至于静态全局变量, 是几乎肯定要出事的. 

静态方法无论是在速度上比非static的方法要好. 至于内存消耗, 那要看你的调用频率是否很高, 如果很少调用, 建议还是使用非static的.
------解决方案--------------------
我试过的,没关系。
但是要注意方法里面不要有共享做的变量存在。
------解决方案--------------------
我赞成搂住意见!要是为了就写写这些静态方法,有必要去重复写那些对象吗?有效率吗?
------解决方案--------------------
UP
------解决方案--------------------


不会有什么问题的,静态方法属于类,只是在类装载器装载该类时,jvm在堆区开辟内存区域而已。
所有的该类的对象共享这个方法资源。如果变量是在静态方法里面申明的,那么属于局部变量,每次调用都会有自己的值,和你调用次数或则是不是多线程无关。如果静态方法里面有类变量,也就是静态变量,那么你多次调用的时候肯定会受影响。因为内存中只有一个值。
------解决方案--------------------