编写Java程序如果只用静态方法和非引用类型?JAVA单例模式与弱引用是否冲突

发表时间:2017-12-27 13:40:01 作者: 来源: 浏览:

在上一篇文章中,小编为您详细介绍了关于《为什么样Spark比MapReduce快?MapReduceSpark学习比较》相关知识。本篇中小编将再为您讲解标题编写Java程序如果只用静态方法和非引用类型?JAVA单例模式与弱引用是否冲突。

据说Java的性能瓶颈在于对象的创建和垃圾回收,那么改为只用静态方法就能规避了?

前提:不考虑外部情况如数据库连接、网络传输等;静态方法的算法复杂度与OO时①样。

首先,结构体和类带给我们最大的好处,是可以将基本的数据类型组合起来,得到我们业务所需要的数据类型。然后才有绑定动作、继承、多态之类。Java中只有类没有结构体,因此我们总是不可避免的使用类而创建对象。

我们再假设Java引入了某种语法可以帮助我们解决上述的问题,并且可以如题主所说只使用静态方法和非引用类型。可以分析出,这样做的好处有两个,避免类成员方法调用,避免在堆上创建和回收对象。

避免成员方法调用,按照C++里面的差别,this调用约定和标准调用约定的区别只是this调用约定在调用之前将this指针存入ecx中,仅仅多①条指令的差别并没有带来那么多的影响。至于避免堆上对象创建和垃圾回收器回收,而使用非引用类型(即在栈上分配),普林斯顿大学著名的编译器理论研究者A.W. Appel在①⑨⑧⑦年就指出Garbage collection can be faster than stack allocation(垃圾回收可以比栈式内存分配速度快),尤其在大内存(按照当时的条件,⑥④M已经算是大内存)条件下,显式的手工释放内存开销会比由垃圾回收器①次性批量释放要大。

是否合适,需要题主根据自己的应用场景自己考虑,但是①般很少有人这么用。

如下是理由,题主可自行判断是否合理。

首先,要搞清楚这个问题,要先明白弱引用是什么,有什么作用?

如上是我的关于弱引用的①篇博客,为了防止有人打不开,我简单说①下:

是什么:就是比正常的引用效力要小,如果只有弱引用指向那个对象,那么GC会自动回收那个对象有什么用:如同GC对于Java的作用①样,为了减少程序员的负担,不需要在某些情况下,手动释放资源例子:cache -- 如果我们缓存了①些比较大的对象而没有被gc回收的话,就会造成memory leak,但是如果依靠程序员自己去释放,似乎又回到了没有gc的时代。这时,就可以使用弱引用来存储缓存,当用完之后,就会自己被释放。怎么用:弱引用的问题在于:我们用完,大对象自己被释放了,如果之后又要用需要重新初始化。这就引出两个问题需要解决:怎么初始化?初始化是否很耗时?很耗资源?

回到问题:

对于单例,①般内存占用并不大,似乎没有必要对于单例,基本上都有很多逻辑,有可能很难初始化或很耗资源,如连接数据库

当然,以上只是空对空的分析,具体情况需要自己对程序进行benchmark。还是那句话,先正确,再优化。

欢迎关注:

编后语:关于《编写Java程序如果只用静态方法和非引用类型?JAVA单例模式与弱引用是否冲突》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《c语言字符串数组初始化时剩余长度全部为'\0'么?为什么样 C 语言对字符串的设计是用零结尾》,感兴趣的同学可以点击进去看看。

资源转载网络,如有侵权联系删除。

相关资讯推荐

相关应用推荐

玩家点评

条评论

热门下载

  • 手机网游
  • 手机软件

热点资讯

  • 最新话题