在上一篇文章中,小编为您详细介绍了关于《为什么样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 语言对字符串的设计是用零结尾》,感兴趣的同学可以点击进去看看。
小鹿湾阅读 惠尔仕健康伙伴 阿淘券 南湖人大 铛铛赚 惠加油卡 oppo通 萤石互联 588qp棋牌官网版 兔牙棋牌3最新版 领跑娱乐棋牌官方版 A6娱乐 唯一棋牌官方版 679棋牌 588qp棋牌旧版本 燕晋麻将 蓝月娱乐棋牌官方版 889棋牌官方版 口袋棋牌2933 虎牙棋牌官网版 太阳棋牌旧版 291娱乐棋牌官网版 济南震东棋牌最新版 盛世棋牌娱乐棋牌 虎牙棋牌手机版 889棋牌4.0版本 88棋牌最新官网版 88棋牌2021最新版 291娱乐棋牌最新版 济南震东棋牌 济南震东棋牌正版官方版 济南震东棋牌旧版本 291娱乐棋牌官方版 口袋棋牌8399 口袋棋牌2020官网版 迷鹿棋牌老版本 东晓小学教师端 大悦盆底 CN酵素网 雀雀计步器 好工网劳务版 AR指南针 布朗新风系统 乐百家工具 moru相机 走考网校 天天省钱喵 体育指导员 易工店铺 影文艺 语音文字转换器