Java学习
文章平均质量分 76
记录学习Java的历程与方法。
KesarChen
一个偏执于计算机的宅男。。。。
展开
-
[java学习]java容器源码初探(1)
一、动态数组ArrayList 在我们开发者眼中,这就是一个“动态数组”,可以“动态”地调整数组的大小,虽然说数组从定义了长度后,就不能改变大小。 实现“动态”调整的基本原理就是:按照某个调整策略,重新创建一个调整后一样大小的数组,然后将原来的数组赋值回去。 下面我们来解析一下几个与数组不一样的方法。看看ArrayList中主要的几个字段(源码剖析): // 默认的初始数组大原创 2016-03-15 18:44:26 · 3297 阅读 · 0 评论 -
Java学习:协变数组和类型擦除(covariant array ; type erasure)
数组的协变性数组的协变性(covariant)是指:如果类Base是类Sub的基类,那么Base[]就是Sub[]的基类。而泛型是不可变的(invariant),List不会是List 的基类,更不会是它的子类。原创 2015-11-14 10:49:24 · 5865 阅读 · 0 评论 -
Java学习:获取当前类名、方法名
为了测试各个函数,如果手动打印每个类名、函数名,那么多函数的话能把人累死,Java早已准备好了一堆记录自身的函数。原创 2015-11-14 11:14:56 · 6449 阅读 · 0 评论 -
[java学习]移位运算交换两数的值的出错情况
移位运算,交换两数的值 int a=10; int b=52; System.err.println("开始:"+a+","+b); a=a^b; b=a^b; a=a^b; System.err.println("结束:"+a+","+b);结果是:开始:10,52结束:52,10什么时候会出错呢?当两个数都是自己时,将会计算出错,结果都会原创 2016-01-25 13:46:26 · 6509 阅读 · 0 评论 -
[读书笔记]JVM的垃圾收集算法
1.标记-清除算法(1)算法思想:第一步,标记好所有需要回收的对象;第二步,清除被标记的对象。 (2)缺点:时间上,效率不高,无论是标记还是清除操作;空间上,会产生大量不连续的内存碎片,使得占用大内存的对象找不到足够的连续内存而进一步又提前触发一次GC。 标记-清除算法执行过程如下图所示: 2.复制算法(1)算法思想:内存区分成两部分大小相等的区域。一半作为使用区,一半作为保留区。申请内存时,原创 2016-02-28 00:16:29 · 6520 阅读 · 0 评论 -
[读书笔记]Java类加载过程
一. 类的生命周期类从被加载到虚拟机内存中开始,到卸载出内存为止,有以下(如图)的生命周期: 以上“加载->验证->准备->解析->初始化”称为类的加载过程。 Java虚拟机规范中没有对什么时候需要开始类加载的第一阶段进行强制约束,而是交给了虚拟机根据具体实现来自由把握。 但是对于初始化阶段,虚拟机有以下5种必须对类立即进行“初始化”的情况: (1)遇到new、getstatic、put原创 2016-02-28 23:50:18 · 4897 阅读 · 0 评论 -
[读书笔记]Java类加载器
一、类与类加载器类加载器除了在类加载阶段的作用外,还确定了对于一个类,都需要由加载它的类加载器和这个类本身一同确定其在Java虚拟机中的唯一性。通俗一点来讲,要判断两个类是否“相等”,前提是这两个类必须被同一个类加载器加载,否则这个两个类不“相等”。 这里指的“相等”,包括类的Class对象的equals()方法、isAssignableFrom()方法、isInstance()方法、instan原创 2016-02-29 22:04:34 · 4303 阅读 · 0 评论