随笔分类 -  【技术专区-Java】

摘要:Netty的零拷贝 Netty中的零拷贝与我们传统理解的零拷贝不太一样。 传统的零拷贝指的是数据传输过程中,不需要CPU进行数据的拷贝。主要是数据在用户空间与内核中间之间的拷贝。 传统意义的零拷贝 Zero-Copy describes computer operations in which th 阅读全文
posted @ 2021-12-24 12:39 洛神灬殇 阅读(72) 评论(0) 推荐(0) 编辑
摘要:探究背景 涉及诸如float或者double这两种浮点型数据的处理时,偶尔总会有一些怪怪的现象,不知道大家注意过没,举几个常见的栗子: 条件判断超预期 System.out.println( 1f == 0.9999999f ); // 打印:false System.out.println( 1f 阅读全文
posted @ 2021-12-23 20:04 洛神灬殇 阅读(535) 评论(0) 推荐(2) 编辑
摘要:Java的文件IO流处理方式 Java MappedByteBuffer & FileChannel & RandomAccessFile & FileXXXputStream 的读写。 Java的文件IO读取介绍 Java在JDK 1.4引入了ByteBuffer等NIO相关的类,使得 Java 阅读全文
posted @ 2021-12-18 23:04 洛神灬殇 阅读(733) 评论(0) 推荐(0) 编辑
摘要:技术简介 java中的日期处理一直是个问题,没有很好的方式去处理,所以才有第三方框架的位置比如joda。文章主要对java日期处理的详解,用1.8可以不用joda。 时间概念 首先我们对一些基本的概念做一些介绍,其中可以将GMT和UTC表示时刻大小等同。 UT时间 UT反应了地球自转的平均速度。是通 阅读全文
posted @ 2021-11-28 12:18 洛神灬殇 阅读(278) 评论(0) 推荐(0) 编辑
摘要:GraalVM 背景 新、旧编程语言的兴起躁动,说明必然有其需求动力所在,譬如互联网之于JavaScript、人工智能之于Python,微服务风潮之于Golang等等。大家都清楚不太可能有哪门语言能在每一个领域都尽占优势,Java已是距离这个目标最接近的选项,但若“天下第一”还要百尺竿头更进一步的话 阅读全文
posted @ 2021-11-06 22:25 洛神灬殇 阅读(437) 评论(1) 推荐(0) 编辑
摘要:FST的概念和定义 FST序列化全称是Fast Serialization Tool,它是对Java序列化的替换实现。既然前文中提到Java序列化的两点严重不足,在FST中得到了较大的改善,FST的特征如下: JDK提供的序列化提升了10倍,体积也减少3-4倍多 支持堆外Maps,和堆外Maps的持 阅读全文
posted @ 2021-11-04 12:43 洛神灬殇 阅读(782) 评论(0) 推荐(0) 编辑
摘要:SafePoint前提介绍 在高度优化的现代JVM里,Safepoint有几种不同的用法。GC safepoint是最常见、大家听说得最多的,但还有deoptimization safepoint也很重要。 在HotSpot VM里,这两种Safepoint目前实现在一起,但其实概念上它们俩没有直接 阅读全文
posted @ 2021-10-20 22:49 洛神灬殇 阅读(692) 评论(0) 推荐(1) 编辑
摘要:序列化和反序列化 序列化就是指把对象转换为字节码; 对象传递和保存时,保证对象的完整性和可传递性。把对象转换为有字节码,以便在网络上传输或保存在本地文件中; 反序列化就是指把字节码恢复为对象; 根据字节流中保存的对象状态及描述信息,通过反序列化重建对象; 一般情况下要求实现Serializable接 阅读全文
posted @ 2021-10-19 19:32 洛神灬殇 阅读(539) 评论(0) 推荐(0) 编辑
摘要:技术介绍 什么是 logback? Logback为取代 log4j 而生。Logback 由 log4j 的创立者 Ceki Gülcü设计。以十多年设计工业级记录系统的经验为基础,所创建的logback 比现有任何记录系统(除了log4j2)更快、占用资源更少,有时差距非常大。 Logback提 阅读全文
posted @ 2021-10-16 12:39 洛神灬殇 阅读(549) 评论(0) 推荐(1) 编辑
摘要:线程异常捕获问题 Java异常在线程之间不是共享的,在线程中抛出的异常是线程自己的异常,主线程并不能捕获到。也就是说你把线程执行的代码看成另一个主函数。 上面A和B的运行是互相独立的,虽然说你看到B所在代码块的函数内容在main中,但是main并不能捕获到这个Runnable里函数的异常,因为它不在 阅读全文
posted @ 2021-10-15 14:24 洛神灬殇 阅读(157) 评论(0) 推荐(1) 编辑
摘要:技术分析 大家都知道Eclipse已经实现了自己的编译器,命名为 Eclipse编译器for Java (ECJ)。 ECJ 是 Eclipse Compiler for Java 的缩写,是 JavaTM 认可的 Java 编译工具(类似 javac)。可以单独下载使用。 IDEA所支持的编译器, 阅读全文
posted @ 2021-10-14 16:02 洛神灬殇 阅读(601) 评论(0) 推荐(2) 编辑
摘要:JPA的介绍分析 Java持久化API (JPA) 显著简化了Java Bean的持久性并提供了一个对象关系映射方法,该方法使您可以采用声明方式定义如何通过一种标准的可移植方式,将Java 对象映射到关系数据库表以及后续的一系列数据持久化行为。 JPA可以将任何普通的Java 对象 (POJO) 类 阅读全文
posted @ 2021-09-25 18:02 洛神灬殇 阅读(125) 评论(0) 推荐(0) 编辑
摘要:ForkJoin线程池框架回顾 ForkJoin框架其实就是一个线程池ExecutorService的实现,通过工作窃取(work-stealing)算法,获取其他线程中未完成的任务来执行。 可以充分利用机器的多处理器优势,利用空闲的线程去并行快速完成一个可拆分为小任务的大任务,类似于分治算法。 F 阅读全文
posted @ 2021-09-21 11:41 洛神灬殇 阅读(500) 评论(0) 推荐(0) 编辑
摘要:Guava包中限流实现分析 RateLimiter 之前的文章中已经介绍了常用的限流算法,而google在Java领域中使用Guava包中的限流工具进行服务限流。 回顾使用案例 Google开源工具包Guava提供了限流工具类RateLimiter,该类基于令牌桶算法实现流量限制,使用十分方便。 @ 阅读全文
posted @ 2021-09-20 11:01 洛神灬殇 阅读(729) 评论(0) 推荐(0) 编辑
摘要:不提XXLJOB或者其他的调度框架,就看我接触的第一个任务调度框架Quartz(温故而知新) Quartz的动态暂停 恢复 修改和删除任务 实现动态添加定时任务,先来看一下我们初步要实现的目标效果图,这里我们只在内存中操作,并没有把quartz的任何信息保存到数据库,即使用的是RAMJobStore 阅读全文
posted @ 2021-09-18 22:56 洛神灬殇 阅读(253) 评论(0) 推荐(1) 编辑
摘要:并发编程的三剑客 在开发高并发系统时有三剑客:缓存、降级和限流。 缓存 缓存的目的是提升系统访问速度和增大系统处理容量。 降级 降级是当服务出现问题或者影响到核心流程时,需要暂时屏蔽掉,待高峰或者问题解决后再打开。 限流 限流的目的是通过对并发访问/请求进行限速,或者对一个时间窗口内的请求进行限速来 阅读全文
posted @ 2021-09-17 22:15 洛神灬殇 阅读(464) 评论(0) 推荐(0) 编辑
摘要:优化目标与策略(Ergonomics) 垃圾回收器、堆和运行时编译器默认选择 G1(Garbage First)收集器 GC线程的最大值受限于堆大小和可用的CPU资源 初始堆空间(Xms)为物理内存的1/64 最大堆空间(Xmx)为物理内存的1/4 分层编译器,同时使用C1和C2 可以将 Java 阅读全文
posted @ 2021-09-13 21:27 洛神灬殇 阅读(121) 评论(0) 推荐(0) 编辑
摘要:前提概要 在开发过程中在使用多线程进行并行处理一些事情的时候,大部分场景在处理多线程并行执行任务的时候,可以通过List添加Future来获取执行结果,有时候我们是不需要获取任务的执行结果的,方便后面引出ExecutorCompletionService。 CompletionService的介绍 阅读全文
posted @ 2021-09-12 19:58 洛神灬殇 阅读(178) 评论(1) 推荐(0) 编辑
摘要:前提概要 简单回顾 jdk 里的队列: 阻塞队列: ArrayBlockingQueue主要通过:数组(Object[])+ 计数器(count)+ ReetrantLock的Condition (notEmpty:非空、notFull:非饱和)进行阻塞。 入队操作: 操作不阻塞: add:添加失败 阅读全文
posted @ 2021-09-11 14:09 洛神灬殇 阅读(1011) 评论(0) 推荐(0) 编辑
摘要:前提概述 Java 7开始引入了一种新的Fork/Join线程池,它可以执行一种特殊的任务:把一个大任务拆成多个小任务并行执行。 我们举个例子:如果要计算一个超大数组的和,最简单的做法是用一个循环在一个线程内完成: 算法原理介绍 相信大家此前或多或少有了解到ForkJoin框架,ForkJoin框架 阅读全文
posted @ 2021-09-10 14:09 洛神灬殇 阅读(512) 评论(0) 推荐(0) 编辑