码迷,mamicode.com
首页 > 其他好文 > 详细

Comparison method violates its general contract

时间:2014-10-29 18:35:17      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:blog   http   io   ar   java   sp   div   on   问题   

 

生产环境出现的错误排查,错误log如下

java.lang.IllegalArgumentException: Comparison method violates its general contract!
	at java.util.TimSort.mergeLo(TimSort.java:747) ~[na:1.7.0_40]
	at java.util.TimSort.mergeAt(TimSort.java:483) ~[na:1.7.0_40]
	at java.util.TimSort.mergeCollapse(TimSort.java:408) ~[na:1.7.0_40]
	at java.util.TimSort.sort(TimSort.java:214) ~[na:1.7.0_40]
	at java.util.TimSort.sort(TimSort.java:173) ~[na:1.7.0_40]
	at java.util.Arrays.sort(Arrays.java:659) ~[na:1.7.0_40]
	at java.util.Collections.sort(Collections.java:217) ~[na:1.7.0_40]

 整个问题在生产环境上间断性出现,在本地开发环境是好的,上网搜了下这个错误,发现遇到的人还不少。具体的原因是因为jdk7的timesort新排序算法导致,具体可以参考这篇博文:

http://www.lifebackup.cn/timsort-java7.html

总结如下:比较器的比较逻辑必须正确,且需要放回相等的情况,即0;同时需要注意的是对于引用类型的比较需要转化成简单类型进行比较

 

Comparison method violates its general contract

标签:blog   http   io   ar   java   sp   div   on   问题   

原文地址:http://www.cnblogs.com/salkking/p/4060065.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!