双亲委派之同类名依赖冲突处理(用户程序中默认使用Appclassloader加载,只能加载同名类一次)&逃逸分析(对象、当前方法)&拆箱装箱(包装类)

依赖说明

项目依赖于A.jar和B.jar。A依赖C的1.0版本,B依赖C的2.0版本。

双亲委派

用户程序中默认使用Appclassloader加载,只能加载一个C。所以AB必有一个不能正常使用,使用自定义classloader解决该问题。

逃逸分析(JDK默认开启)

逃逸分析是:分析了对象只在当前函数范围内使用,对象分配将会在栈上申请空间。对于栈而言,函数运行完立即清理,不需要等到GC,大大缓解了GC压力。

在Java代码运行时,通过JVM参数可指定是否开启逃逸分析。

-XX:+DoEscapeAnalysis : 表示开启逃逸分析

-XX:-DoEscapeAnalysis : 表示关闭逃逸分析 从jdk 1.7开始已经默认开始逃逸分析,如需关闭,需要指定-XX:-DoEscapeAnalysis

应该是开始还是在堆上创建,即时编译器发现改对象为热点代码,然后才转到栈上分配的。

逃逸分析是JIT中的一个重要优化。

Boolean、Byte的所有对象,都是预先创建好的(类加载的时候)
Character、Short、Integer、Long是-128~127的对象是预先创建好的(Character没有负数)
现象:如果Integer a = 1,则是从创建好的缓存中,直接拿出。
原因:为了节省内存,这些数字使用概率很高,早就创建好,之后都用同一个,是提高效率的做法。

如果是 new 对象则全为false;

Integer a1 = new Integer(1);
Integer a2 = new Integer(1);
Integer a3 = new Integer(1);
System.out.println(a1 == a2);
System.out.println(a1 == a3);
System.out.println(a3 == a2);

下面这段代码输出全为true;

Integer a1 = 1;
Integer a2 = 1;
Integer a3 = 1;
System.out.println(a1 == a2);
System.out.println(a1 == a3);
System.out.println(a3 == a2);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值