摘要:
LinkedList是一个双向链表的实现,允许所有的元素,包括null。 对于index操作,会从链头到链尾地搜索,即使它靠近一个特殊索引位置。 非线程安全的,在多线程环境下,需要外部同步或调用Collections.synchronizedList(new LinkedList(...));获得一 阅读全文
摘要:
可变数组大小的List实现,允许所有的元素,包括null。(该类可粗略地看作是Vector,除了它不是同步化的) size、isEmpty、get、set、iterator和listIterator操作的运行时间是常量。add操作对于添加n个元素,需要O(n)的时间。其他的操作需要线性时间。 每个A 阅读全文
摘要:
在软件开发中,发布于应用中多处的功能被称为横切关注点。通常,这些横切关注点从概念上是与应用的业务逻辑相分离的(但往往直接嵌入到应用的业务逻辑之中)。将横切关注点与业务逻辑相分离是AOP所要解决的。 一、AOP术语 1.通知(Advice):定义切面是什么以及何时使用。除了描述要完成的工作,还要解决何 阅读全文
摘要:
Spring提供两种技巧,可以帮助我们减少XML的配置数量。 1.自动装配(autowiring)有助于减少甚至消除配置<property>元素和<constructor-arg>元素,让Spring自动识别如何装配Bean的依赖关系。 2.自动检测(autodiscovery)比自动装配更进一步, 阅读全文
摘要:
TreeSet的实现基于TreeMap,元素的顺序取决于元素自然顺序或者在被创建出来时提供的比较器。 对于基本操作,add、remove、contains的时间复杂度为logn。 不是线程安全的,如果在多线程环境下,必须被同步化,可通过一个object作为锁来同步,或者使用Collections.s 阅读全文
摘要:
HashSet实现Set接口,内部维护一个HashMap实例变量。不保证顺序,允许null元素。 对于基本的操作,如add,remove,contains,size,只需要常量的时间复杂度。 不是线程安全的,如果在多线程环境下,需要被同步化,如调用方法Collections.synchronized 阅读全文
摘要:
1.枚举根节点 可作为GC Roots的节点主要在全局性的引用(例如常量或类静态属性)与执行上下文(例如栈帧中的本地变量表)中。 可达性分析对执行时间的敏感体现在GC停顿上,因为分析工作必须在能确保一致性的快照中进行,即不可以出现在分析过程中对象引用关系还在不断变化,所以这是导致GC进行时必须停顿所 阅读全文
摘要:
GC需要完成的3件事情: 1.哪些内存需要回收? 2.什么时候回收? 3.如何回收? 哪些内存需要回收? 对于程序计数器、虚拟机栈、本地方法栈3个区域随线程而生,随线程而灭,栈帧随方法的进入和退出执行入栈和出栈的操作。每一个栈帧分配多少内存基本上在类结构确定下来时就已知(运行期JIT编译器会进行一些 阅读全文
摘要:
Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域各有的用途,以及创建和销毁的时间,有的区域随虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。 1.程序计数器 一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器,字节码 阅读全文
摘要:
核心反射机制java.lang.reflect提供了“通过程序来访问关于已装载的类的信息”的能力,给定一个Class实例,可以获得Constructor、Method、Field实例,这些对象提供“通过程序来访问类的成员名称、域类型、方法签名等信息”的能力。 反射机制允许一个类使用另一个类,即使当前 阅读全文