- 浏览: 8356 次
- 性别:
- 来自: 长春
最新评论
文章列表
这个问题想了很久,脑子想迷糊了都,不知道理解得对不对。
在CMS的并发标记阶段,可能会出现两个并发问题:
第一,CMS在执行并发标记,同时,应用在修改老年代中对象的引用。这时候,老年代的引用状态会发生改变,所以CMS要想办法把这种改变记录下来。CMS使用card table来记录这些改变,把发生改变的对象所在的card标记为dirty,然后在最终标记阶段再次扫描这些标记为dirty的card。(不过这样也会产生浮动垃圾)
第二,CMS在执行并发标记,同时,新生代GC开始运行。注意,新生代GC也需要扫描上述的card table(据我理解这个card table只有一个),在扫描的时候,也是 ...
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class Test {
public static void main(String[] args) {
UserManager target = new UserManagerImpl();
UserManager proxy = (UserManager) Proxy.newProxyInstance(target. ...
网上关于get和load的讨论很多,下面是我的一些浅显认识。
从源码角度来讲:很简单,LoadType不同。
LoadType是LoadEventListener的内部类,源码中一共定义了7种,GET和LOAD最常用。
还有一个IMMEDIATE_LOAD(nakedEntityReturned为true)在加载代理实际数据的过程中使用。
这个类的对象在创建的时候采用了builder模式。
而GET和LOAD两种LoadType主要的区别是:
GET:allowNulls为true;allowProxyCreation为false
LOAD:allowNulls为f ...