Java
文章平均质量分 76
pjmike
这个作者很懒,什么都没留下…
展开
-
聊聊线程池那些事
前言平时开发过程中,我们会经常和线程池打交道,有时还会根据不同的业务进行线程池隔离,那么了解线程池的工作原理和参数设置就是非常必要的,所以今天的主题就是探究线程池的那些事儿。为什么使用线程池在使用一项技术之前,了解 「why」 是至关重要的,即我们为什么要使用线程池?线程池有什么好处?线程池是一种池化技术,使用线程池可以减少线程创建时的资源消耗,同时也可以提高响应速度,即当有任务到达时,如...原创 2020-03-23 09:58:51 · 281 阅读 · 0 评论 -
聊聊类加载器与双亲委派模型
前言我们经常会在面试中遇到有关类加载器的问题,而作为一名Java开发人员应该了解类加载器如何工作?双亲委派模型是什么?如何打破双亲委派?为什么打破?等等。所以今天的主题就是聊一聊类加载器。ClassLoader 介绍《深入理解Java虚拟机》这本书大家都不陌生,想必我们大多数人了解JVM知识都是通过这本书,在该书中也详细介绍了Java类加载的全过程,包含加载、验证、准备、解析和初始化这5个阶...原创 2020-03-16 11:36:52 · 236 阅读 · 0 评论 -
聊聊ThreadLocal那些事
前言这篇文章聊聊 ThreadLocal,我们经常会在一些开源中间件的源码中见到它的身影,比较常见的用途是保存上下文信息,还有就是保证了线程安全。实际上,ThreadLocal 为每个线程提供一个单独的变量,确是一种保证线程安全的手段,ThreadLocal 创建的变量只能被当前线程访问,其他线程不得干涉。ThreadLocal API使用 ThreadLocal 其实非常简单,直接看下面...原创 2020-03-09 12:04:46 · 600 阅读 · 0 评论 -
Netty 入门初体验
前言这篇主要介绍一个Netty 客户端与服务端的示例代码,对Netty有一个直观感受,看看如何使用Netty,后续文章会对Netty的各个组件进行详细分析Netty简介Netty是一款异步的事件驱动的网络应用程序框架,支持快速开发可维护的高性能的面向协议的服务器和客户端。Netty主要是对java 的 nio包进行的封装为什么要使用 Netty上面介绍到 Netty是一款 高性能的网...原创 2020-02-29 09:42:30 · 151 阅读 · 0 评论 -
BIO,NIO,AIO概览
前言本文简单介绍一下BIO,NIO,AIO以及同步与异步,阻塞与非阻塞等概念同步与异步同步与异步关注的是消息通信机制同步同步就是发起一个调用后,等待当前调用返回,没得到结果之前,调用不返回,就像做事一样,事情必须一件一件做完了,才能做下一件异步异步就是发起一个调用后,立刻得到回应,但没有返回结果,此时我们可以处理其他的请求,被调用者通常依靠事件,回调等机制来通知调用...原创 2018-08-31 11:37:08 · 154 阅读 · 0 评论 -
JVM 系列文章之 GC 算法浅析
Java的堆结构再介绍垃圾回收算法之前,先来看看 Java中的堆,Java里的堆指的是用于存放 Java 对象的内存区域。JVM的堆被同一个JVM实例中所有的Java线程共享,它通常由某种自动管理机制所管理,这种机制通常叫做”垃圾回收”。在Java 中,堆被分为两个不同的区域: 新生代(Young),老年代(Old)。新生代又被划分为三个区域: Eden,From Survivor,To ...原创 2018-09-06 15:25:56 · 162 阅读 · 0 评论 -
JVM 系列文章之 Full GC 和 Minor GC
Full GCFull GC 就是收集整个堆,包括新生代,老年代,永久代(在JDK 1.8及以后,永久代会被移除,换为metaspace)等收集所有部分的模式RednaxelaFX大在[Major GC和Full GC的区别是什么?触发条件呢?- 知乎]( https://www.zhihu.com/question/41922036/answer/93079526)这个问题有关于 GC...原创 2018-09-06 15:26:31 · 201 阅读 · 0 评论 -
JVM 系列文章之 Java 的内存区域
前言 下面关于 Java 的内存区域介绍大部分参考深入理解Java虚拟机,也参考了网上很多资料,以下图片均摘自网络运行时数据区域Java虚拟机在执行 Java 程序的过程中会把它管理的内存划分为若干个不同的数据区域。根据《Java 虚拟机规范》将 Java虚拟机所管理的内存分为以下几个运行时数据区域: - 程序计数器 - Java虚拟机栈 - 本地方法栈 - Java...原创 2018-09-06 15:27:02 · 253 阅读 · 0 评论 -
JVM 系列文章之 对象存活分析 - 引用计数 and 可达性分析
前言在垃圾回收器回收对象时,我们如何判断哪些对象是”活”的,哪些是”死”的,关于判断对象存活的方法主要分为两类: 引用计数法 和 可达性分析算法引用计数法引用计数器就是: 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减一;任何时刻计数器为 0 的对象就是不可能再被使用的,可以此时进行回收。但是引用计数法有一个很大的缺陷,就是它很难...原创 2018-09-06 15:27:33 · 171 阅读 · 0 评论 -
JDK自带的反编译工具 javap
前言以前经常看一些文章使用 javac 反编译 class文件,然后生成一堆字节码,再一顿骚操作分析字节码,可谓是非常炫酷。这里有时间刚好也来玩玩JDK的 javapjavap 介绍javap是 JDK自带的一个工具,可以将 class文件反编译成字节码,它并没有将class文件反编译成 java文件,但是依然反编译成程序员能读的格式。下面举一个小例子,java源代码如下:...原创 2018-09-06 15:28:01 · 10300 阅读 · 0 评论 -
Java NIO.2系列文章之异步通道API入门
NIO.2概览NIO.2也就是人们常说的 AIO,在Java 7中引入了NIO的改进版NIO 2,它是异步非阻塞的IO方式。AIO的核心概念就是发起非阻塞方式的I/O操作,立即响应,却不立即返回结果,当I/O操作完成时通知。这篇文章主要介绍NIO 2的异步通道API的一些内容,后续文章再分析NIO.2的其他特性异步通道API从Java 7开始,java.nio.channe...原创 2018-08-31 11:36:45 · 303 阅读 · 0 评论 -
Java NIO 系列文章 (一) Buffer,Channel,Selector入门
前言 下面部分内容参考 Java NIO 系列教程-并发编程网NIO类库简介NIO 库是在JDK 1.4中引入的,NIO 弥补了原来同步阻塞 I/O 的不足,它在标准Java代码中提供了高速的,面向块的I/O。NIO的核心部分主要有: - 通道 Channel - 缓冲区 Buffer - 多路复用器 Selector下面一一介绍着三大核心部分。通道 Cha...原创 2018-08-31 11:36:08 · 1415 阅读 · 0 评论 -
详解Java Socket的工作机制
Socket的来龙去脉下面的分析主要是参阅了计算机网络(谢希仁第7版)进行总结的,从系统调用—>应用编程接口API—>套接字接口来分析Socket的来龙去脉,当然维基百科上也有对Socket的详细解释1. 系统调用大多数操作系统使用系统调用的机制在应用程序和操作系统之间传递控制权。对程序员来说,系统调用和一般程序设计中的函数调用非常相似 2. 应用编程接口AP...原创 2018-08-13 01:02:02 · 2064 阅读 · 1 评论 -
原生JDBC开发详解及问题总结(一)
原生JDBC开发详解及问题总结(一)本篇文章主要介绍JDBC开发过程,程序代码需要注意的问题及原生JDBC自身存在的问题总结。JDBC基本编程步骤 加载数据库驱动 创建并获取数据库连接 创建JDBC statement对象或者preparedStatement预编译对象 设置sql语句 设置sql语句中的参数(使用preparedStatement时使用) 通过stat原创 2017-08-01 09:50:52 · 729 阅读 · 0 评论 -
Java中关于多重继承的问题
Java中关于多重继承的问题标签(空格分隔): Java多重继承的含义 多重继承指的是一个类可以同时从多于一个的父类那里继承行为和特征,然而Java为了保证数据安全,它只允许单继承。 有时候我们确实是需要实现多重继承,以达到不同的需求。而且现实生活中也真正地存在这样的情况,比如遗传:我们即继承了父亲的行为和特征也继承了母亲的行为和特征。幸运的是,Java还是为我们提供了两种方式让我们曲原创 2017-08-08 10:43:55 · 774 阅读 · 0 评论 -
Java基础知识之容器(一)
Java基础知识之容器(一)Java 容器前言:在java开发中我们会大量的使用集合,在这里我将总结常见的集合类,每个集合类的优点和缺点,以便我们能更好的使用集合。关于简单容器分类的结构图以上是容器的分类情况,其中比较常用的就是图中红色圈出的部分.点线框表示接口,实线框表示具体的类。1.基本概念Collection:一个独立元素的序列,这些元素都服从一条或多条规则,是大多数集合类型的接口。List原创 2017-08-16 10:48:58 · 229 阅读 · 0 评论 -
Java关于初始化问题的总结(一)
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl原创 2017-08-04 10:28:05 · 677 阅读 · 0 评论 -
Iterator和Iterable解析
之前一直搞不清楚Iterator和Iterable到底有什么关系,它们的区别是什么,今天查看Java集合类源码才发现其中的名堂,接下来给大家讲讲我的分析与理解。Iterable接口Iterable是接口,Iterable是1.5引入的新特性,Iterator是1.2就有了,二者都是为了迭代造作,Iterable只是包装了Iterator,从而允许实现此接口的对象成为foreach语句的目标,而且这样原创 2017-10-16 16:51:58 · 508 阅读 · 0 评论 -
项目中碰到的ExceptionInInitializerError异常
背景之前在集成第三方即时通信系统-融云的时候,我直接clone它的服务端源码,然后导入我的项目,我在测试它连接融云服务器案例时,发现一直不成功,始终报一个 ExceptionInInitializerError 的异常。后来通过网上查资料才发现,这个异常是静态变量初始化时出现异常时,JVM会抛出java.lang.ExceptionInInitializerError的异常。由此,我对这个异常做...原创 2018-03-18 20:39:25 · 39416 阅读 · 1 评论 -
平衡二叉树的插入与删除
定义AVL树是带有平衡条件的二叉查找树。它要求在AVL树中任何节点的两个子树的高度(高度是指节点到一片树叶的最长路径的长) 最大差别为1,如下图所示:为什么有AVL树大多数BST操作,例如搜索,最大,最小,插入,删除等,消耗取O(h)时间,h是BST的高度。对于倾斜的二叉树,这些操作的成本可能会变成O(n)。如果我们在每次插入和删除之后确保树的高度保持O(Logn),那么我...原创 2018-08-09 22:10:50 · 9020 阅读 · 0 评论 -
动态代理的原理及其应用
动态代理的介绍动态代理是一种在运行时动态地创建代理对象,动态地处理代理方法调用的机制。实际上它是一种代理机制。代理可以看做是对调用目标的一个封装,直接通过代理来实现对目标代码的调用与静态代理的比较静态代理提前写好代理类,每个业务类都要对应一个代理类,不灵活 - ISubject,该接口是被访问者或者被访问的对象 - SubjectImpl,被访问者的具体实现类 ...原创 2018-08-07 22:29:46 · 6882 阅读 · 0 评论 -
Java中的访问权限控制详解
Java中的访问权限控制详解Java访问权限修饰词有四类:无(默认情况下,包访问权限),public,private,protected。下面一一分析它们的区别以及类访问权限。默认情况下的包访问权限1.包访问权限是指当前包中的所有其他类对那个成员都有访问权限,但包以外的类则不能访问。一个编译单元只能隶属一个包,经由包访问权限,处于同一编译单元中的所有类彼此之间都是自动可访问的。 2.需要注意的是:原创 2017-08-01 09:34:01 · 504 阅读 · 0 评论