Java基础
文章平均质量分 93
Java基础
晋文子上
隔世爱恋情难却……
展开
-
深入学习Java虚拟机:内存区域
在Java中,分配内存和回收内存都由JVM自动完成。 内容:首先从操作系统层面简单介绍物理内存的分配和Java运行的内存分配之间的关系,明白在Java中使用的内存与物理内存区别。Java如何使用从物理内存申请下来的内存,以及如何来划分它们,如何分配和回收内存。最如何解决OutOfMemoryError,并提供一些处理这类问题的常用手段 内存的不同形态-物理内存和虚拟内存:...原创 2018-12-09 14:48:01 · 454 阅读 · 0 评论 -
深入学习Java虚拟机:类加载机制与类加载器
Java虚拟机-类加载机制与类加载器Java中类加载、连接和初始化的过程都是在程序运行期间完成的,这些策略虽然会令类加载时增加些性能开销,但是会提高java的灵活性。Java动态扩展的特性就是依赖运行期动态加载和动态连接的特点实现的。 JVM类加载机制Java源代码被编译为字节码文件后,需要加载进内存才能在程序中被使用。程序启动时并不会一次性加载程序要用的所有class文件,而是根...原创 2018-12-09 14:00:02 · 1672 阅读 · 2 评论 -
JavaSE-新特性(JDK5-JDK12)持续维护
汇总 JDK5新特性 自动装箱与拆箱枚举静态导入可变参数(Varargs)内省(introspector)泛型(Generic) For-Each循环 JDK6新特性 Desktop类和SystemTray类使用JAXB2来实现对象与XML之间的映射理解STAX使用Compiler API轻量级 Http Server API插入式注解处...原创 2019-02-05 18:52:17 · 3964 阅读 · 1 评论 -
深入理解反射机制(Java)
关于反射:动态加载一个指定的类,获取该类中的所有内容。并将字节码文件中的内容都封装成对象,便于操作这些成员。反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法 反射的好处:大大的增强了程序的扩展性。 Java反射机制提供的功能: 判断任意一个对象所属的类、构造任意一个类的对象、判断任意一个类所具有的成员...原创 2019-01-11 15:05:45 · 675 阅读 · 0 评论 -
深入理解Java内存模型
Java 内存模型是什么,为什么要有 Java 内存模型,Java 内存模型解决了什么问题 计算机内存模型:现代计算机,CPU在计算时,并不总是从内存读取数据,数据读取顺序优先级是:寄存器一高速缓存(多级缓存)一内存 使用CPU Cache原因:计算机在执行程序时,每条指令都是在CPU中执行的,执行指令过程中,势必涉及到数据的读取和写入。由于程序运行过程中的临时数据...原创 2019-01-11 15:03:40 · 783 阅读 · 0 评论 -
JavaSE多线程-ThreadLocal原理(源码分析)
关于Thread类:Thread类中维护了ThreadLocal.ThreadLocalMap属性,这就是每个线程的存储空间。相当于Map,key为当前线程,value为entry。Public class Thread implements Runnable {/* ThreadLocal values pertaining to this thread. This map is m...原创 2018-12-15 20:05:06 · 230 阅读 · 1 评论 -
集合源码分析(七)ConcurrentHashMap实现
并发,几乎总是离不开集合这类高级数据结构的支持。如两个线程需要同时访问一个中间临界区(Queue),比如常会用缓存作为外部文件的副本(HashMap)。 总结:其实可以看出JDK1.8版本的ConcurrentHashMap的数据结构已经接近HashMap,相对而言,ConcurrentHashMap只是增加了同步的操作来控制并发,从JDK1.7版本的ReentrantLock+Segment+H...原创 2018-07-02 01:49:06 · 206 阅读 · 1 评论 -
集合源码分析(六)TreeMap实现
内部最后会存在左旋和右旋的问题public class TreeMap<K,V> extends AbstractMap<K,V> implements NavigableMap<K,V>, Cloneable, java.io.Serializable{private final Comparator<? super K> comparator;...原创 2018-07-02 01:47:33 · 147 阅读 · 0 评论 -
集合源码分析(五)LinkedHashMap实现
Map接口额的哈希表和链接列表实现,允许null值和null键,不保证映射顺序,但却保证顺序永久不变 简单来说就是LinkedHashMap相比于HashMap来说就是多了这些红色的双向链表而已。 linkedHashMap的核心就是存在存储顺序和可以实现LRU算法 LinkedHashMap 实现与 HashMap 的不同之处在于,后者维...原创 2018-07-02 01:46:45 · 168 阅读 · 0 评论 -
集合源码分析(四)HashMap实现
HashMap是常用的Java集合之一,是基于哈希表的Map接口的实现。与HashTable主要区别为不支持同步和允许null作为key和value。由于HashMap不是线程安全的,如果想要线程安全,可以使用ConcurrentHashMap代替。 HashMap的底层是哈希数组,数组元素为Entry。HashMap通过key的hashCode来计算hash值,当hashCode相同时,...原创 2018-07-02 01:45:23 · 211 阅读 · 0 评论 -
JavaSE集合源码分析(二)--深入理解LinkedHashSet原理(JDK1.8)【修改中】
关于LinkedHashSet类:LinkedHashSet 根据元素的 hashCode 值来决定元素的存储位置,但它同时使用链表维护元素的次序,这使得元素看起来是以插入顺序保存的。LinkedHashSet插入性能略低于 HashSet,但在迭代访问 Set 里的全部元素时有很好的性能。LinkedHashSet:(链表,有序,不重复) LinkedHashSe...原创 2018-07-02 01:42:31 · 182 阅读 · 0 评论 -
JavaSE集合源码分析(一)--深入理解ArrayList原理(JDK1.8)
ArrayList :1)ArrayList内部是通过一个Object数组实现的,当数组填满之后会根据需要进行扩容 2)最好预估ArrayList的大小,并设置其初始容量,以避免不必要的扩容所造成的性能问题。 3)ArrayList的初始容量是10,ArrayList每次扩容都将容量变为原来的1.5倍,若还小于所需的最小值,那么直接分配容量为所需值。 4)ArrayList线程不安全,允...原创 2018-07-02 01:41:08 · 188 阅读 · 0 评论