作者回复: 1、外部类初次加载,会初始化静态变量、静态代码块、静态方法,但不会加载内部类和静态内部类。
如果我们使用内部类实现,不会在初始化类时加载内部类,只有在我们第一次调用EnumSingleton.INSTANCE,才会加载 EnumSingleton 类,而只有在加载EnumSingleton类之后,才会实例化创建INSTANCE对象,由于INSTANCE是一个静态成员变量,所以在初始化时由<clinit> 方法保证线程安全。
2、元空间存放的是类元素,而静态常量池存放的是类的字面量和字符引用,运行时常量池存放的是直接引用。这里的静态常量池也是很多人说的字符串常量池。
作者回复: 同样感谢你们一路以来的坚持和支持。
作者回复: 下一讲开始讲到数据库调优了,欢迎一起学习成长。
作者回复: 我理解的是,静态内部类是一个独立类,只是借用外部类来隐藏自己。跟外部类没有实质性的关系,即内部静态类不需要有指向外部类的引用。 map的node以及list的node都是一个独立类,不属于map和list,但node又想借外部类来存放自己。这种方式也可以防止内存泄漏。
而内部类则不一样,内部类只能在外部类中实例化被使用,属于真正的内部类,属于外部类的一部分,它可以访问外部类的任何成员变量。非静态内部类需要持有对外部类的引用。
作者回复: 对的,不用使用static修饰
作者回复: 通过动手实现,更透彻的理解Future的实现原理
作者回复: 这相当于两个JVM,设置的参数是互不影响的。但是还是会存在相互影响的情况,会存在相互竞争一些共享资源的情况,例如CPU,IO等
作者回复: 枚举类的域,即代码中的INSTANCE就是我们已经实例化对象的属性了,相当于private static Singleton instance=new Singleton()。 正常的枚举实现是一个饿汉模式,没有懒加载的实现。枚举类的这个可以再仔细思考下。
作者回复: 枚举是饿汉模式,也就是在属性中已经实例化了,相当于我们最开始讲的饿汉模式。
作者回复: 具体哪里有问题呢?欢迎指出
作者回复: 需要自己在工作中多学会思考,再加上多读一些源码,对着源码自己再重新手写这套设计模式的实现。我在之前推荐过《大话设计模式》这本书,写的比较生动有趣,建议阅读。
作者回复: 更像观察者模式