
Java SE
文章平均质量分 84
饥饿小猪
只有打好扎实的基础,才能走的更远。 zhur_jim@163.com
(微信公众号:HungryPigKing)
展开
-
二分钟快速掌握Caffeine 三种填充策略:手动、同步和异步
一、简介Caffeine — 一个高性能的 Java 缓存库。缓存和 Map 之间的一个根本区别在于缓存可以回收存储的 item。回收策略为在指定时间删除哪些对象。此策略直接影响缓存的命中率 — 缓存库的一个重要特征。Caffeine 因使用 Window TinyLfu 回收策略,提供了一个近乎最佳的命中率。二、Caffeine 为我们提供了三种填充策略:手动、同步和异步1、手动加...原创 2018-11-03 00:07:36 · 7779 阅读 · 3 评论 -
String类分析(JDK1.8)
String类分析(JDK1.8)1、源码String 对象是对 char 数组进行了封装实现的对象, 主要有 2 个成员变量: char 数组, hash 值。2、String对象的不可变性String类被final关键字修饰了,变量char 数组也是final修饰了。不可继承修改。3、优点保证 String 对象的安全性。假设 String 对象是可变的,那么 String 对象将可能被恶意修改。b、保证 hash 属性值不会频繁变更,确保了唯一性, 使得类...原创 2021-02-18 17:15:21 · 458 阅读 · 1 评论 -
java线上服务器jvm内存泄漏的一次踩坑(OutOfMemoryError)
前几天线上一台游戏服务器发生内存泄漏,cpu彪的很高,老板的脾气像cpu一样,是不是过来询问问题排查怎么样了。。。因为线上服务器启动的时候,加了- XX:+ HeapDumpOnOutOfMemoryError ,发现服务器项目目录下多一个hprof文件,这就是重要的线索,然后解析xxx.hprof这个文件,方法很多,(1)、可以使用JHAT,这是JDK默认提供的Java堆分析工具,jh...原创 2019-08-24 11:10:44 · 849 阅读 · 0 评论 -
java -jar命令运行jar包时指定外部依赖jar包
https://blog.youkuaiyun.com/w47_csdn/article/details/80254459转载 2019-07-02 19:09:41 · 6720 阅读 · 0 评论 -
四、[ Java NIO ] 全面解析Selector模式
一、为什么使用selector?传统的IO网络编程是,一个客户端连接到服务器端,服务器就起一个线程去维护与这个连接。对服务器开销非常大。而NIO引入的Selector模式解决了一个客户端一个线程的问题;选择器提供了一种机制,用于监视一个或多个NIO通道,并识别何时可以使用一个或多个NIO通道进行数据传输。这样,一个线程可以用于管理多个通道,从而管理多个网络连接。线程之间的上下文切换对于操作系统...原创 2019-01-31 17:01:00 · 2011 阅读 · 0 评论 -
五、[ Java NIO ] server和client完整通信实践案例
服务器:我们通过调用静态open方法创建Selector对象。然后,我们还通过调用其静态open方法(特别是ServerSocketChannel实例)来创建通道。这是因为ServerSocketChannel是可选择的,并且适合于面向流的侦听套接字。然后将其绑定到我们选择的端口。记得我们前面说过,在将可选通道注册到选择器之前,必须首先将其设置为非阻塞模式。接下来我们做这个,然后把通道注...原创 2019-01-31 18:39:28 · 703 阅读 · 0 评论 -
二、[ Java NIO ] NIO与IO对比,并深入详解NIO核心属性状态
NIO的介绍:(1)、java.io中最为核心的一个概念是流(stream) ,面向流的编程。(2)、Java中,一个流要么是输入流,要么是输出流,不可能同时既是输入流又是输出流。(3)、java.nio中拥有3个核心概念: selector,Channel与Buffer。关系如下:(4)、在java.nio中,我们是面向块(block)或是缓冲区(buffer)编程的。...原创 2019-01-27 13:01:04 · 510 阅读 · 0 评论 -
从ASCII,到Unicode 和 UTF-8特性介绍
ASCII (American Standard Code for information Interchange,美国信息交换标准代码)7 bit来表示一个字符,共计可以表示128种字符。我们知道,计算机内部,所有信息最终都是一个二进制值。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256...原创 2019-01-31 22:59:18 · 581 阅读 · 0 评论 -
三、[ Java NIO ] java.nio.ByteBuffer只读设置和warp(),以及HeapByteBuffer和DirectByteBuffer实现零拷贝详解
Java.nio.ByteBuffer:不管是什么类型的数据存储,最终底层处理都是ByteBuffer形式来操作。只是他们的字节长度不一样。(读写操作相关的API就不介绍)1、public abstract ByteBuffer slice(): 创建要给新的byteBuffer 。与其说是新的byteBuffer,不如说是一个新的引用,是从原有的ByteBuffer中截取一段,自定义...原创 2019-01-27 18:52:36 · 1432 阅读 · 0 评论 -
六、[ Java NIO ] ByteBuffer的不足之处总结
JDK NIO类库中提供的java.nio.Buffer,但是由于NIO编程的复杂性,ByteBuffer自然就暴露了他的局限性了:1、ByteBuffer 的API不是很丰富,很多都是要自己去封装实现一些api供自己去支持一些高级的需求。2、ByteBuffer只有一个标识位置的position,读写的时候要手工去flip,rewind,一不小心操作,很容易搞乱导致数据错乱接收。3、...原创 2019-02-14 19:42:58 · 805 阅读 · 0 评论 -
10秒快速掌握ScheduledExecutorService 中的 scheduleWithFixedDelay() 和 scheduleFixedRate() 区别
scheduleWithFixedDelay: 不管线程任务的执行时间的,每次都要把任务执行完成后再延迟固定时间后再执行下一次。scheduleFixedRate: 是以固定频率来执行线程任务,固定频率的含义就是可能设定的固定时间不足以完成线程任务,但是它不管,达到设定的延迟时间了就要执行下一次了。...原创 2019-08-23 11:58:57 · 1551 阅读 · 0 评论 -
一、[ Java IO ] 设计原理之装饰者模式(对比继承)
一、Java/IO库的设计原则:1、Java的1O库提供了一个称做链接的机制,可以将一个流与另一个流首尾相接,形成一个流管道的链接。这种机制实际上是一种被称为Decorator(装饰)设计模式的应用。2、通过流的链接,可以动态的增加流的功能,而这种功能的增加是通过组合一些流的基本功能而动态获取的。我们要获取一个1/O对象,往往需要产生多个/O对象,这也是Java 1/0库不太容易掌握的原因...原创 2019-01-26 11:41:17 · 388 阅读 · 0 评论 -
jdk1.8 HashMap源码深度剖析,彻底熟悉底层实现
目录一、HashMap工作原理及数据结构二、HashMap源码分析(jdk8版本的源码)1、了解内部属性2、HashMap的构造函数,初始化3、HashMap的内部结构4、HashMap操作一、HashMap工作原理及数据结构 public class HashMap<K,V> extends AbstractMap<K,V> ...原创 2018-09-04 00:54:35 · 1718 阅读 · 4 评论 -
Neither the JAVA_HOME nor the JRE_HOME environment variable is defined 错误解决
兴冲冲的下载了一个Tomcat,跑到bin看到一个startup.bat就去执行,结果提示Neither the JAVA_HOME nor the JRE_HOME environment variable is defined At least one of these environment variable is needed to run this program。好,再去下载个最新转载 2015-05-17 09:50:08 · 1729 阅读 · 0 评论 -
解析Java反射java.lang.IllegalArgumentException: wrong number of arguments
今天在写一个反射的例子的时候,遇到了java.lang.IllegalArgumentException: wrong number of arguments这个错误,后来看了源代码,才知道错误的原因,一个很低级的错误;首先我的代码是这样写的:在我的jpa栏中注解的那块代码中: public void parse(Object obj, String methodName,String c原创 2015-08-22 21:07:16 · 36259 阅读 · 2 评论 -
BlockingQueue
BlockingQueue前言: 在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景。认识BlockingQueue阻塞队列,顾名思义,首先它是一个队列,...转载 2018-03-09 14:28:46 · 184 阅读 · 0 评论 -
线程池 二、深度源码解析AbstractExecutorSerivice
AbstractExecutorService是一个抽象类,他实现了ExecutorSerivice接口,拿出上一篇的图:对接口中的方法进行了实现!但是是抽象的类,无法实例化!我们再看看他的子类可以实例化的一个类,ThreadPoolExecutor (extends AbstractExecutorService)他继承了AbstractExecutorService,其实 Thread...原创 2018-07-24 00:43:23 · 340 阅读 · 0 评论 -
线程池 一、executor接口和ExecutorService接口介绍
工作这么多年,很少有时间写博客,昨天和一个正在跳槽找工作的同学交流,他是做web的,面试的时候被问到了线程池一块的技术,被难住了!这让我不禁也想巩固下我这方便的基础了,天天在用的东西,尤其是像我们这种做互联网服务端开发的,高并发处理中创建一个优异Thread Pool对线程进行复用还是很重要的!俗话说好记性不如烂笔头,先介绍下Executor接口吧!为什么需要创建线程池:(1)因为服务器如...原创 2018-07-20 18:54:40 · 9022 阅读 · 2 评论 -
Synchronized全面详解
线程安全的概念: 当多个线程访问同一个类(对象或方法)的时候,该类始终能表现出正确的行为, 那么这个类(对象或者方法)就是线程安全的。Synchronized:一、多个线程一个锁: 1、按照cpu分配的先后顺序排队访问 2、不断尝试获得锁, 3、如果拿到锁执行代码块里的内容,如果拿不到继续尝试获得锁 4、存在锁竞争的问题二、多个线程多个锁:...原创 2018-08-07 00:23:11 · 395 阅读 · 0 评论 -
volatile 解析
volatile: 使变量在多个线程间可见 (1)、在java中每一个线程都会有一块工作内存,其中存放着是所有线程共享的主内存的变量值的拷贝。 (2)、当前线程执行时,他在自己的工作内存区操作这些变量。 (3)、为了存取一个共享的变量,一个线程通常是先获取锁定并清除他的内存工作区,把共享变量从 所有的线程的共享内存中正确装入到他自己的工作内...原创 2018-08-07 22:43:04 · 241 阅读 · 0 评论 -
java序列化机制Serialize接口使用
一、理解Serializable接口是启用其序列化功能的接口。实现java.io.Serializable 接口的类是可序列化的。没有实现此接口的类将不能使它们的任意状态被序列化或逆序列化。序列化:把对象转化为字节序列的过程称之为对象的序列化反序列化:反之,称之为反序列化Java Serialize序列化机制缺点: 序列化数据结果比较大、传输效率比较低 不能跨语...原创 2018-08-12 22:14:01 · 5512 阅读 · 0 评论 -
ThreadLocal 全面解析
ThreadLocal:一.对ThreadLocal的理解 1、线程的局部变量,是一种多线程间并发访问变量的解决方案。与其synchronized 等加锁方式不同。 ThreadLocal完全不提供锁,是以空间换时间的手段,为每个线程提供变量的独立副本,那么每个线 程可以访问自己内部的副本变量。以保证线程安全; 2、性能没有优势,并发不高的情况下,加锁的性能会更好...原创 2018-08-09 00:05:20 · 277 阅读 · 0 评论 -
StringTokenizer类的用法
StringTokenizer是一个用来分隔String的应用类,相当于VB的split函数。1.构造函数public StringTokenizer(String str)public StringTokenizer(String str, String delim)public StringTokenizer(String str, String delim, boolean转载 2014-12-23 13:39:53 · 596 阅读 · 0 评论