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