Java
文章平均质量分 84
babylove_BaLe
不负勇往。
展开
-
HashMap 在JDK1.7中的实现原理分析
一、HashMap的介绍HashMap是存储键值对(key,value)的一种数据结构。 每一个元素都是一个key-value。 HashMap最多只允许一个key为null,允许多个key的value值为null。 HashMap是非线程安全的,只适用于单线程环境。 HashMap实现了Serializable、Cloneable接口,因此它支持序列化和克隆。二、HashMap的实现原理从原创 2017-10-30 21:55:55 · 587 阅读 · 0 评论 -
HashMap 在JDK1.8中的实现(与JDK1.7对比)
一、HashMap的实现分析介绍通过前面JDK1.7的分析,我们知道,当负载因子和Hash算法设计的很好时,可以降低hash碰撞的概率,但在数据量过大时也避免不了会出现链表变长的情况,一旦出现链表过长,查找元素变慢,则会严重影响HashMap的性能。 于是,在JDK1.8中,对数据结构做了进一步的优化,引入了红黑树。而当链表长度太长(默认超过8)时,链表就转换为红黑树,利用红黑树快速增删改查的特点原创 2017-10-30 22:05:03 · 514 阅读 · 0 评论 -
JVM之对象创建过程
一、Java对象的创建过程在Java程序中,通常都是通过 new 关键字来创建对象,那么在虚拟机中对象是如何创建的? (普通Java对象,不包含数组和Class对象)虚拟机创建对象主要经历5个步骤:类加载检查、为对象分配内存、内存空间初始化、对象设置、执行对象方法。1 类加载检查当虚拟机遇到 new 指令时,首先会去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表原创 2017-12-02 19:47:13 · 445 阅读 · 0 评论 -
Map 的4种遍历方式及比较
Map 的4种遍历方式及比较KeySet第一种方式: keySet 其实遍历了两次,第一次获取Iterator,第二次根据key获取value,因此性能较差。 public void testKetSet(Map<String, String> map) { Set<String> keys = map.keySet(); ...原创 2018-04-13 13:12:43 · 6003 阅读 · 0 评论 -
JDK动态代理的实现原理浅析
JDK动态代理简介什么是JDK动态代理? 先看看代理的概念——代理:为其他对象提供一种代理以控制对这个对象的访问。 代理在生活中很常见,比如买火车票可以不去火车站,而是通过代售点;想要逃课了,就让同学代签到等等。 说白了,就是可以通过代理来完成目标事件。(自我理解)不同于静态代理直接采用编码的方式实现,JDK动态代理是利用反射机制在运行时创建代理类,进而调用相应的方法。J...原创 2018-06-27 14:37:16 · 517 阅读 · 0 评论 -
多线程经典实例(一)
在多线程的学习当中,有许多经典的例子值得学习,比如售票窗口、线程交替执行、生产者消费者等。下面就来看两个有关线程交替执行的案例。两个线程轮流打印数字这里采用 wait/notify 等待通知和 Lock/Condition 两种方式实现。wait()/notify()实现简单介绍一下wait/notify机制的几个方法。 以下4个方法都必须在获取了锁的情况下才能调用: ...原创 2018-07-20 21:10:44 · 5482 阅读 · 1 评论 -
多线程经典实例(二)
上一篇文章多线程经典实例(一) 讲到了几个多线程相关的例子,接下来我们来看一个经典的案例:生产者消费者问题。介绍生产者消费者问题是多线程中的一个经典问题,问题大概就是有一块缓冲区作为仓库,当仓库未满时生产者可以将产品放入仓库,当仓库未空时消费者可以从仓库取走产品。解决这个问题的核心就是处理好多线程之间的同步与协作。生产者消费者的实现方式通常有以下几种方式来实现生产者与消费者...原创 2018-07-21 14:23:27 · 384 阅读 · 0 评论 -
浅析Cglib动态代理
介绍我们知道JDK动态代理只能代理实现了接口的类,没有实现接口的类是无法通过JDK来代理的。 Cglib是针对类来实现代理的,它的原理是对指定的目标类生成一个子类,这个子类覆盖目标类的方法并在其中实现方法的增强。因为采用了继承和重写,因此不能对final的类、final方法进行代理。Cglib底层其实是借助了ASM这个非常强大的Java字节码生成框架,它可以在运行时对字节码进行修改或...原创 2018-07-22 10:40:16 · 620 阅读 · 0 评论