![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java基础
木村牧村
这个作者很懒,什么都没留下…
展开
-
日志之slf4j
日志之slf4j简介与commons-logging相同,slf4j也是一个通用的日志接口,在程序中与其他日志框架结合使用,并对外提供服务。Simple Logging Facade for Java简称 slf4j,Java简单日志门面系统。在我们的代码中,不需要显式指定具体日志框架(例如:java.util.logging、logback、log4j),而是使用slf4j的API来记录日...转载 2019-01-18 15:25:15 · 522 阅读 · 0 评论 -
Java集合--线程安全(CopyOnWrite机制)
Java集合–线程安全(CopyOnWrite机制)在前几章中,我们介绍了Java集合的内容,具体包括ArrayList、HashSet、HashMap、ArrayQueue等实现类。不知道各位有没有发现,上述集合都有一个共同的特点,那就是线程不安全性,在并发情况下都不能保证数据的一致性。(当然,这个集合必须是共享了,所以才会有数据不一致)所以,当我们在进行并发任务时候,共享了一个不适用于并...转载 2019-02-28 14:20:39 · 642 阅读 · 0 评论 -
Java集合--ConcurrentMap
Java集合–ConcurrentMap1 Map并发集合1.1 ConcurrentMapConcurrentMap,它是一个接口,是一个能够支持并发访问的java.util.map集合;在原有java.util.map接口基础上又新提供了4种方法,进一步扩展了原有Map的功能:public interface ConcurrentMap<K, V> extends Map...转载 2019-02-28 15:20:01 · 249 阅读 · 0 评论 -
Java集合--ConcurrentHashMap原理
Java集合–ConcurrentHashMap原理ConcurrentHashMap初始化我们首先,来看下ConcurrentHashMap中的主要成员变量;public class ConcurrentHashMap<K, V> { //用于根据给定的key的hash值定位到一个Segment final int segmentMask; //用于...转载 2019-03-01 15:37:36 · 180 阅读 · 0 评论 -
Java集合--HashMap解惑
Java集合–HashMap解惑与List集合、Set集合隶属于Collection不同,Map是一个独立的接口,与Collection相同级别的接口。重要的是,Map集合提供了一个不一样的元素存储方法,利用“key–value”的形式进行存储。其中,每个键映射一个值。而在Set集合中,元素的存储就是利用Map的这一特性来实现。简单的介绍了下Map集合,接下来,就让笔者对其主要实现类Hash...转载 2019-02-20 17:22:11 · 241 阅读 · 0 评论 -
Java集合--阻塞队列(ArrayBlockingQueue)
Java集合–阻塞队列(ArrayBlockingQueue)1 ArrayBlockingQueueArrayBlockingQueue是一个阻塞队列,底层使用数组结构实现,按照先进先出(FIFO)的原则对元素进行排序。ArrayBlockingQueue是一个线程安全的集合,通过ReentrantLock锁来实现,在并发情况下可以保证数据的一致性。此外,ArrayBlockingQue...转载 2019-03-06 14:40:39 · 220 阅读 · 0 评论 -
Java集合--阻塞队列(LinkedBlockingQueue)
Java集合–阻塞队列(LinkedBlockingQueue)1. LinkedBlockingQueueLinkedBlockingQueue是一个使用链表实现的阻塞队列,支持多线程并发操作,可保证数据的一致性。与ArrayBlockingQueue相同的是,LinkedBlockingQueue也实现了元素“先进先出(FIFO)”规则,也使用ReentrantLock来保证数据的一致性...转载 2019-03-06 16:13:45 · 508 阅读 · 0 评论 -
Java集合--非阻塞队列(ConcurrentLinkedQueue基础)
Java集合–非阻塞队列(ConcurrentLinkedQueue基础)1.0 非阻塞队列在上篇中,我们讲到了阻塞队列,以及阻塞队列中的几个实现类。本篇,我们继续对队列进行研究。而今天的主题,则是非阻塞队列!在非阻塞队列中,ConcurrentLinkedQueue是主要代表。之前,我们了解了什么是阻塞队列,在此我们再简单地回顾下!什么是阻塞队列?阻塞,顾名思义:当我们的生产者向队列...转载 2019-03-07 10:31:30 · 536 阅读 · 0 评论 -
Java虚拟机--对象的访问
Java虚拟机–对象的访问对象如何访问之前的文章中,介绍过Java虚拟机栈的知识。在Java虚拟机栈中,每个线程执行一个方法时,都会创建一个栈帧,栈帧用于存储这个方法的一些信息,其中包括局部变量表,也就是该方法中用到了哪些局部变量。局部变量表存储了编译期可知的基本数据类型(boolean int double等)、引用数据类型(创建的对象)和returnAddress类型(指向一条指令,方...转载 2019-03-14 14:08:27 · 197 阅读 · 0 评论 -
Java虚拟机--你的对象有多大
Java虚拟机–你的对象有多大如何计算对象大小上文中,笔者提到了对象头,并且说到了对象头中的Mark Word在32位的机器中会占用4字节,在64位机器中占用8字节。那么,整个对象会占用多大内存呢?带着这样的疑问,我们来实际的测量下,一个对象到底会占用多大内存?在实际计算之前,我们先来普及下接口Instrumentation和其实现类InstrumentationImpl。Instrum...转载 2019-03-14 14:30:49 · 390 阅读 · 0 评论 -
Java虚拟机--类加载器
Java虚拟机–类加载器如何加载一个Class文件但是,关于类加载器的只是,并没有做任何介绍,只是说了下会在后面的文章中进行单独阐述。那么,本篇的意义就是来告诉大家类加载器的实现。首先,我们来简单的回顾下类加载机制中的内容。类加载机制虚拟机把类的数据从.class文件加载到内存,并对class文件中的数据进行校验、转换、解析、初始化等操作后,最终形成可以被虚拟机识别并使用的Class对象...转载 2019-03-14 15:36:40 · 181 阅读 · 0 评论 -
Java集合--非阻塞队列(ConcurrentLinkedQueue实现原理)
Java集合–非阻塞队列(ConcurrentLinkedQueue实现原理)链表结点在ConcurrentLinkedQueue中,元素保存在结点中,对外以元素形式存在,对内则以结点形式存在。每一个结点中,都有指向下一个结点的指针,依次向后排列,形成链表结构。在ConcurrentLinkedQueue中,有一个内部类–Node,此类代表队列的结点。在Node中,item表示元素,ne...转载 2019-03-07 14:07:51 · 615 阅读 · 0 评论 -
Java虚拟机--类加载器源码
Java虚拟机–类加载器源码类加载器源码分析下面,我们就来深入的学习下类加载器的源码,看看到底做了哪些事情?类加载体系上图呈现是源码级别的类加载体系,ClassLoader是基类,所有的类加载器都需要继承它(启动类加载器除外)。首先,我们通过上文中的测试类来举例,一点点剖析类加载的流程。创建一个包下普通的类:com.jiaboyan.test.ObjectTestpublic cl...转载 2019-03-14 17:52:30 · 292 阅读 · 0 评论 -
Java虚拟机--虚拟机内存区域
Java虚拟机–虚拟机内存区域Java虚拟机内存区域Java程序在JVM虚拟机中运行,当我们一个类被加载到虚拟机中时,JVM会给该类分配具体的内存空间/内存地址,而这被分配的区域就是Java虚拟机运行时内存区域。那么,该片区域到底有什么,又可以做什么,接下来就来一一解答。在讨论JVM内存区域划分之前,先来看一下Java程序具体执行的过程:首先是我们的编写的Java源代码文件—xxx.jav...转载 2019-03-07 14:57:32 · 380 阅读 · 0 评论 -
Java-String那些事
Java-String那些事Java-String那些事String对于广大程序员来说,并不陌生,是我们在编写程序中经常使用到的对象。但是,你真的对String了解吗,使用的方式对吗?接下来,笔者就对String来进行全面的解析,让你对String有更深入的了解!更重要的是,面试的时候,虐虐面试官!String源码(截取)public final class String imple...转载 2019-03-12 11:11:22 · 204 阅读 · 0 评论 -
Java虚拟机--对象的建立
Java虚拟机–对象的建立你的对象如何创建?Java是一门面向对象的编程语言,在Java程序中,我们做的最多一件事,就是new对象,在程序运行过程中,无时无刻都有对象被创建出来。在实际开发过程中,有很多行为可以引起对象的创建,最直接最常用的就是使用new关键字来进行创建,这种方式在Java规范中被称为:由执行类实例创建表达式而引起的对象创建。那么,对于虚拟机来说,对象的创建会经历怎么样的过...转载 2019-03-12 11:35:22 · 161 阅读 · 0 评论 -
Java集合--Set(基础)
Java集合–Set(基础)Set继承于Collection接口,是一个不允许出现重复元素,并且无序的集合,主要有HashSet和TreeSet两大实现类。在判断重复元素的时候,Set集合会调用hashCode()和equal()方法来实现。HashSet是哈希表结构,主要利用HashMap的key来存储元素,计算插入元素的hashCode来获取元素在集合中的位置;TreeSet是红黑树结...转载 2019-02-18 14:54:36 · 247 阅读 · 0 评论 -
Java集合--Queue(Java中实现2)
Java集合–Queue(Java中实现2)1.1 Deque源码(基于JDK1.7.0_45)本票中,我们来看看Deque源码,在Queue基础上,又增加了哪些功能?Deque接口,是一个实现了双端队列数据结构的队列,即在头尾都可进行删除和新增操作;//接口Deuque:public interface Deque<E> extends Queue<E> {...转载 2019-02-27 16:26:38 · 671 阅读 · 1 评论 -
Java集合--Queue(Java中实现1)
Java集合–Queue(Java中实现1)在Java中,ArrayDeque、LinkedList、PriorityQueue等类实现了Queue接口,模拟了队列的数据结构。其中,PriorityQueue是Queue直接子类实现,在原有基础上实现了元素的排序功能。除此之外,Queue还有一个子接口–Deque,对Queue进行了扩展,定义了头尾操作功能,既可在队头添加(删除)元素,也可...转载 2019-02-22 11:22:11 · 664 阅读 · 0 评论 -
Disruptor框架学习(2)--为啥这么快
Disruptor框架学习(2)–为啥这么快在上一篇中,笔者阐述了Disruptor的代码实现和数据结构。在说到,Disruptor为什么性能那么高的时候,提及了几个概念:CAS、缓存行、伪共享。本篇,就对此进行一个详细的介绍。1.1 CPU缓存在现代计算机当中,CPU是大脑,最终都是由它来执行所有的运算。而内存(RAM)则是血液,存放着运行的数据;但是,由于CPU和内存之间的工作频率不同,...转载 2019-01-23 19:22:09 · 249 阅读 · 0 评论 -
日志之logback
日志之logback1.1 简介师出同门,与log4j一样,logback也是由Ceki Gülcü开发的开源日志组件,可以说是log4j的改进版;在现如今的项目中,logback的出现次数越来越多,是目前主流首选的日志记录工具。1.2 logback结构logback分成三个模块:logback-core,logback- classic,logback-access。logba...转载 2019-01-18 16:01:02 · 228 阅读 · 0 评论 -
Java日志框架性能比较
Java日志框架性能比较1 Java日志框架性能比较前面几章,笔者分别介绍了log4j,logback,log4j2三大日志实现框架。接下来,就用具体的数据比较下,哪个日志框架的性能更好!单线程:外循环100次,内循环100000次;多线程:开启100个线程,每个线程执行100000次;1.1 测试代码:(1)log4j:public class log4jDemo { ...转载 2019-01-18 16:26:44 · 3263 阅读 · 0 评论 -
日志之log4j2
日志之log4j21.1 简介log4j2,一个日志的实现框架,是log4j的升级版本,于2014年7月正式亮相。与第一代log4j不同,log4j2完全重写了log4j的日志实现,并不是在原有基础上进行的升级,解决了log4j中的一些问题,例如:多线程下性能低下、api不支持占位符{}的使用、配置文件不能自动重新加载等。为什么说log4j在多线程情况下性能低下呢?主要是synchroniz...转载 2019-01-18 16:44:53 · 674 阅读 · 0 评论 -
Disruptor框架学习(1)--怎么实现
Disruptor框架学习(1)–怎么实现1 Disruptor学习在上一篇文章中,笔者提到了log4j2中的异步logger。通过测试数据来看,在使用异步logger后,打印日志的时间明显缩短,系统响应时间得到了巨大的提升。那么,disruptor究竟是什么,为什么它可以提升系统的性能?1.1 Disruptor简介Disruptor是一个开源框架,研发的初衷是为了解决高并发下列队锁的...转载 2019-01-18 17:19:54 · 263 阅读 · 0 评论 -
Java-Type
Java-TypeType是Java 编程语言中所有类型的公共高级接口(官方解释),也就是Java中所有类型的“爹”;其中,“所有类型”的描述尤为值得关注。它并不是我们平常工作中经常使用的 int、String、List、Map等数据类型,而是从Java语言角度来说,对基本类型、引用类型向上的抽象;Type体系中类型的包括:原始类型(Class)、参数化类型(ParameterizedType...原创 2019-01-14 15:49:07 · 192 阅读 · 0 评论 -
Java集合--List
Java集合–ListJava集合作为一个Developer,Java集合类是我们在工作中运用最多的、最频繁的类。相比于数组(Array)来说,集合类的长度可变,更加适合于现代开发需求;Java集合就像一个容器,可以存储任何类型的数据,也可以结合泛型来存储具体的类型对象。在程序运行时,Java集合可以动态的进行扩展,随着元素的增加而扩大。在Java中,集合类通常存在于java.util包中。...转载 2019-01-24 17:53:51 · 199 阅读 · 0 评论 -
Java集合--List源码
Java集合–List源码ArrayList完整源码:public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable { //实现Serializable接口,生成...原创 2019-01-24 18:53:49 · 235 阅读 · 0 评论 -
Java泛型的使用
Java泛型插除和使用1. 什么是泛型?泛型,即“参数化类型”,就跟在方法或构造函数中普通的参数一样,当一个方法被调用时,实参替换形参,方法体被执行。当一个泛型声明被调用,实际类型参数取代形式类型参数。2. 为什么需要泛型?对于Java开发者来说,集合是泛型运用最多的地方,例如:List、Map<String,Integer>;试想一下,如若没有泛型泛型,当我们对集合进行遍历...转载 2019-01-16 16:31:29 · 453 阅读 · 0 评论 -
日志之commons-logging
日志之commons-loggingJava日志系统学习作为一名Java开发者,日志是我们工作中经常接触到的一项技术。对于Web应用而言,日志的重要性不言而喻,是必不可少的一部分;日志提供了丰富的记录功能,例如程序运行时的错误信息,描述信息,状态信息和执行时间信息等。在实际生产环境中,日志是查找问题的重要来源,良好的日志格式和记录可以帮助Developer快速定位到错误的根源,找到问题的原因...转载 2019-01-16 18:57:12 · 2495 阅读 · 0 评论 -
日志之log4j
日志之log4j1.1 简介Log4j是一个由Java编写可靠、灵活的日志框架,是Apache旗下的一个开源项目;现如今,Log4j已经被移植到了C、C++、Python等语言中,服务更多的Developer;使用Log4j,我们更加方便的记录了日志信息,它不但能控制日志输出的目的地,也能控制日志输出的内容格式;通过定义不同的日志级别,可以更加精确的控制日志的生成过程,从而达到我们应用的需求...转载 2019-01-16 19:28:13 · 285 阅读 · 0 评论 -
Java对象大小内幕浅析
Java对象大小内幕浅析Java对象的内存布局:对象头(Header),实例数据(Instance Data)和对齐填充(Padding)。虚拟机的对象头包括两部分信息,第一部分用于存储对象自身的运行时数据,如hashCode、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等。这部分数据的长度在32位和64位的虚拟机(未开启指针压缩)中分别为4B和8B,官方称之为”Mark ...转载 2019-01-22 16:56:52 · 210 阅读 · 0 评论 -
Java集合--Set(基础)
Java集合–Set(基础)Set继承于Collection接口,是一个不允许出现重复元素,并且无序的集合,主要有HashSet和TreeSet两大实现类。在判断重复元素的时候,Set集合会调用hashCode()和equal()方法来实现。HashSet是哈希表结构,主要利用HashMap的key来存储元素,计算插入元素的hashCode来获取元素在集合中的位置;TreeSet是红黑树结...转载 2019-02-15 17:58:16 · 337 阅读 · 0 评论 -
Java集合--TreeMap完全解析
Java集合–TreeMap完全解析在Map集合框架中,除了HashMap以外,TreeMap也是我们工作中常用到的集合对象之一。与HashMap相比,TreeMap是一个能比较元素大小的Map集合,会对传入的key进行了大小排序。其中,可以使用元素的自然顺序,也可以使用集合中自定义的比较器来进行排序;不同于HashMap的哈希映射,TreeMap底层实现了树形结构,至于具体形态,你可以简单...转载 2019-02-21 20:06:55 · 1044 阅读 · 1 评论 -
Java集合--Queue队列介绍
Java集合–Queue队列介绍对于Queue,或许你跟我一样,并不会将其与集合框架联系到一起,更多时候是将其归属到数据结构中。尤其是查找集合相关的教程时,大多都是List、Set、Map,讲解Queue队列的很少出现。但,当你真正去了解、看源码时,会发现Queue是Collection的一个子接口,与List、Set同一级别;题外话说多了,到底什么是Queue,让我们来看!1. Que...转载 2019-02-22 11:03:29 · 648 阅读 · 0 评论 -
Java虚拟机--对象内存布局
Java虚拟机–对象内存布局对象中的数据前两篇,我们讲到了Java对象的类加载,Java对象的初始化操作。本篇,我们来继续学习Java对象,看看Java对象在内存中如何布局,看看Java对象中由哪些数据构成,以及教给大家如何测量一个对象的大小。HotSpot虚拟机下,一个对象在内存中包含了3大区域,分别为:对象头(Header)、实例数据(Instance Data)和对齐填充(Paddin...转载 2019-03-12 15:59:56 · 258 阅读 · 0 评论