java的static方法会不会造成内存负担?

https://www.zhihu.com/questio...
这个问题下有人回答说
如果是手机开发, static 会构成内存负担,memory leak 隐患,尽量少用吧。但不用实例话可以直接调用有时又更方便,相对节省内存,这个就拿捏吧。。

阅读 10.1k
5 个回答

这样的说法真是胡说八道。首先所有的方法本质上(底层)都是静态的,非静态方法只是多传了一个隐藏的 this 参数。所以任何方法不论是否静态都会占用内存空间。其次优化内存不应该关心方法,而是应该专注于对象的生存周期。

static修饰符能够与属性、方法和内部类一起使用,表示静态的。
一个类中,一个static变量只会有一个内存空间,虽然有多个类实例,但这些类实例中的这个static变量会共享同一个内存空间。
static的变量是在类装载的时候就会被初始化。编译的时候就会进行静态存储分配。
静态存储分配是指在编译时就能确定每个数据目标在运行时刻的存储空间需求,因而在编译时就可以给他们分配固定的内存空间。

因此,你的static方法或者属性越多,在一开始就会分配固定的内存空间,那么大部分的内存空间分配给了static,剩下的内存空间就不多了,就会造成内存负担。

至于memory leak隐患是另外一个话题,不是因为static变量太多造成的。

static方法本身不会导致memory leak,在static方法中访问static变量或其他释放不掉的东西才会导致memory leak隐患

那个人简直是瞎说...

是对,static方法本身不会导致内存负担的,出问题,肯定是使用方法不对导致的,与其追究“static会不会构成内存负担”,还不如优化自己的代码

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题