经常看到网上说懒汉式可以做到延时加载,而饿汉式在类加载的时候就会实例化。
但是我们平常在用单例的时候,基本上都是直接 Single.getInstance()的方式去获取实例,懒汉式在我们第一次调用这个方法的时候会实例化,那么饿汉式呢?
饿汉式的单例类是在我们启动虚拟机的时候就加载了,还是在我们第一次调用 Single.getInstance()的时候加载呢?
1
Hyponet Jul 9, 2018
看你有多少个饿汉了
|
2
twogoods Jul 9, 2018
恶汉一开始就加载了 getInstance 只是返回那个已创建的实例而已。既然实例最终都是要用到的,内存终究是要占的,懒汉式代码写起来还复杂,有必要吗?
|
3
lihongming Jul 9, 2018 via Android
学学静态内部类吧,完美
|
4
zjp Jul 9, 2018 via Android 网上的文章错了,就这么简单。
一个类只有到被调用(静态方法,静态属性,new(),子类初始化,main 方法还有反射)才会被加载。除了单例中还有其他静态方法被先调用的情况,懒汉饿汉的初始化时机一样。 推荐《深入理解 Java 虚拟机》三手资料简直有毒 |
8
abcbuzhiming Jul 9, 2018
我一直不明白这个时代用懒加载还有意义吗?无非就是第一次启动快一点罢了
|
9
zjp Jul 9, 2018 via Android
|
10
cyspy Jul 9, 2018 via Android
如果你有一千个需要单例的对象,其中几百个可能很久都用不到,显然应该用懒加载。但大多数情况下只需要几个单例而且必须用到,显然没区别。
|
11
springGun Jul 9, 2018
饿汉式 classLoader 第一次加载.class 创建吗?
|
12
lihongjie0209 Jul 10, 2018
先用最简单的饿汉, 如果真的发现内存不够用了, 再优化嘛
|
13
zhouquan03 Jul 10, 2018
推荐静态内部类方式,简单易懂。
|
14
ex1gtnim7d OP @lihongming @zhouquan03 目前开发中确实是用静态内部类的方式去实现单例的
|
15
ex1gtnim7d OP @zjp 周志明那本书吗
|
16
crayygy Jul 10, 2018 via iPhone
Effective Java 推荐使用静态内部类,综合来看的话,这种的确是最简洁也最方便的写法
|
18
luoyou1014 Jul 10, 2018
没有吐槽这个名词吗, 我记得我学习的时候都是用的贪婪加载, 懒加载, 或者叫即时加载和延时加载.
咋现在叫懒汉和饿汉了, 感觉好没文化... |
19
ex1gtnim7d OP @luoyou1014 哈,我第一次接触都是这么叫的
|
20
reus Jul 10, 2018
@luoyou1014 是哪个培训班老师起的名字吧,难听
|
21
zjl11 Jul 20, 2018 推荐使用 enum 做单利
|