本文是对JDK6中Collections.sort方法的源码解析,也可以看作是对Comparison method violates its general contract! 在JDK6中,该方法底层使用的是经过优化后的归并排序,废话不多说,直接看源码。 public static <T> void sort(List<T> list, Comparator<? 这里是JDK6中归并排序的第一个优化。 这里是JDK6中归并排序的第二个优化。 JDK6中的排序是基于传统的归并排序做了部分优化,这两个优化都很简单,实际上效率并未提高多少。所以在JDK7中将其替换为TimSort,下回分解。 (完)
如果说垃圾回收算法是内存回收的方法论,那么垃圾回收器就是内存回收的具体实现,下图展示了7中作用于不同分代的收集器。其中用于新生代的回收器包括Serial,PraNew,Parallel Scavenge,回收老年代的收集器包括 Serial Old ,Parallel old,CMS,还有作用于回收整个java堆的G1收集器,不同收集器之间的连线表示他们可以搭配使用。
security目录下覆盖原来的文件 *
小型程序。默认情况下不会是这种选项,HotSpot会根据计算及配置和JDK版本自动选择收集器
在 JDK 版本的世界里,从来都是 Oracle 发他的新版本,我们继续用我们的老版本。三年之前用 JDK 7,后来终于升级到了
java 内存模型中存在一个叫做 String常量池的区域,其中存放着字符串常量。
/bin/bash #echo需要-e参数 alias echo='echo -e' SHELL=/bin/bash LC_ALL=zh_CN.GB18030 JAVA_JRE=/usr/jdk6/jre export/home/tmn/oracle/product/11.2.0/dbhome/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/jdk6 /bin:/usr/jdk6/jre/bin:/sbin:/usr/bin:. :/export/home/tmn/bin:/usr/jdk6/bin:/usr/jdk6/jre/bin:/sbin:/usr/bin:. =/usr/local/unixODBC CLASSPATH=/usr/jdk6/lib:/usr/jdk6/jre/lib:.
分别列出了JDK6中的Segment分段加锁机制和JDK8中的CAS无锁算法并发机制。 基于JDK6 在JDK6中ConcurrentHashMap的的并发实现主要利用内部类Segment实现”分段加锁“的思想。 程晓明,探索 ConcurrentHashMap 高并发性的实现机制 方腾飞,聊聊并发(四)——深入分析ConcurrentHashMap 基于JDK8 JDK8的版本,与JDK6的版本有很大的差异。
今天我们就来说说JDK6升级到JDK7会遇到的坑。本文为了方便搜索,就直接以异常信息作为文章标题了。 为什么上面代码在JDK6中运行无问题,而在JDK7中却会抛异常呢? JDK6的排序算法,在不能修改代码的情况下,解决这个兼容的问题。 分析 在我以前的认知中,高版本的JDK是可以兼容之前的代码的,与同事讨论了一番另加搜索了一番,事实证明,JDK6到JDK7确实存在兼容问题(不兼容列表)。 JDK6中的实现则忽略了这种情况。那么比较的约束是什么呢?看这里,大体如下: ?
分别列出了JDK6中的Segment分段加锁机制和JDK8中的CAS无锁算法并发机制。 基于JDK6 在JDK6中ConcurrentHashMap的的并发实现主要利用内部类Segment实现”分段加锁“的思想。 程晓明,探索 ConcurrentHashMap 高并发性的实现机制 方腾飞,聊聊并发(四)——深入分析ConcurrentHashMap 基于JDK8 JDK8的版本,与JDK6的版本有很大的差异。
标题中的substring方法指的是字符串的substring(int beginIndex, int endIndex)方法,这个方法在jdk6,7是有差异的。 substring有什么用? JDK 6 String背后是由char数组构成的,在JDK6中,String包含三个字段:char value[], int offset, int count,意思很简单。 JDK6中的部分源码可以说明这个问题。 对于JDK 6,解决方案是使用以下内容: x = x.substring(x, y) + "" JDK 7,8 JDK6这种问题在JDK7+中已经改善了,JDK7+中实际是重新创建了一个字符数组,如图。
在JDK6,升级为JDK7或者JDK8的过程中会遇到一些奇怪的问题,简单的介绍一下经典的ClassNotFound:sun.nio.*、com.sun.image.codec.jpeg.*等。 背景简介 很多项目使用在JDK6升级到JDK7或者JDK8的过程中,会遇到一些问题。 class TestCtSymJdk6NotPass { private JPEGCodec jpegCodec; private SdpSupport sdpSupport; } JDK6 原因 在JDK6以及以后的版本,JDK在目录下新增了一个链接文件${JDK_HOME}/lib/ct.sym文件。 比如JDK6中的sun.net.sdp.SdpSupport类。在ct.sym中就没有sun.net.sdp包。 ?
-dev libcups-dev libxrender-dev xorg-dev ant(1.7以上) libxtst-dev libxi-dev libxt-dev ②.openjdk7 , jdk6 我使用的jdk6为:jdk-6u45, ③.将CurrencyData.properties文件中的日期一定要改成10年内, 否则在编译过程中会报错从而导致编译失败: Error: time is more 执行如下命令: export LANG=C export ALT_BOOTDIR="/usr/local/jdk6" export ALT_JDK_IMPORT_PATH="/usr/local/jdk6
然而在JDK6与JDK7+由于虚拟机的调整,intern返回的对象有所不同。 仅讨论hotspot的实现 下面代码在JDK6与JDK8中会有不同的结果。 System.out.println(str1 == str1.intern()); System.out.println(str2 == str2.intern()); } } JDK6 false false JDK6还保留着永久代(对JAVA虚拟机规范中的方法区的实现),字符串常量池在永久代中。
在JDK6的时候,很多标准规范禁止使用String.intern(),因为如果池化控制不好的话,非常可能碰到OOM。 bug_id=6962930 JDK6中的String.intern() JDK6时代,所有通过String.intern()处理过的字符串都被保存在PermGen中,是Java堆的一个固定大小部分,主要用来存储已经加载的类信息和字符串常量池 JDK6中字符串常量池这样的实现最大的问题的就是它保存的地方--PermGen。 JDK6中StringTableSize这个参数帮助价值不大,因为还是受到PermGen固定大小的限制。所以,接下来的讨论将抛弃JDK6。 JDK6到JDK7u40之间XX:StringTableSize默认值是1009,7u40以后,包括JDK8,这个默认值被提升到60013。
Error: could not open `C:\Program Files\Java\jre6\lib\i386\jvm.cfg') jdkerror 前些日子装了个jdk7试了试,后来做项目需要换成jdk6 ,安装完jdk6,设置完环境变量后出现问题。
/usr/libexec/java_home -v 1.8` # 设置默认JDK export JAVA_HOME=$JAVA_8_HOME # 设置alias命令动态切换JDK版本 alias jdk6 =$JAVA_6_HOME" alias jdk8="export JAVA_HOME=$JAVA_8_HOME" 3 生效 $ source ~/.bash_profile 4 切换JDK版本 $ jdk6
/usr/libexec/java_home -v 1.8` # 设置默认JDK export JAVA_HOME=$JAVA_8_HOME # 设置alias命令动态切换JDK版本 alias jdk6 =$JAVA_6_HOME" alias jdk8="export JAVA_HOME=$JAVA_8_HOME" 3 生效 $ source ~/.bash_profile 4 切换JDK版本 $ jdk6
在JDK6和JDK7中有哪些不一样吗? 那么在JDK6和JDK7中substring到底是怎么操作的呢? 3. JDK 6中的substring()方法: String实际上是一个字符数组.在 JDK6中, String对象主要包含3个属性域: value 字符数组,存储字符串实际的内容 offset 该字符串在字符数组
JDK6的代码,由于历史原因,Sun JDK6跟OpenJDK6的代码并不同步。但是其中的HotSpot VM仍然是相对一致的。 另外,Sun JDK6跟OpenJDK6在切代码的时候不一定是在同一天,所以同一个大版本号(例如HotSpot 20.0)里面的内容可能会稍微有点不一样。