
JDK
时间催熟
这个作者很懒,什么都没留下…
展开
-
站在Java角度看zero-copy,mmap,direct-memory
本文专门解释关于高性能IO的基层技术,关于zero-copy,mmap,direct-memory,这些都是Linux/Windows/Mac OS都支持的底层api,但我会用Java作为主语言。打比方有需求是从文件error.txt中读取文字,然后做一些业务修改操作再回写到socket把文件传输给同伴。Java写这个逻辑是很简单的用 InputStream 流 1chunk,1chunk读入到一个buffer,然后把内容修改完,写入 OutputStream 流,写回文件,然后发到socket buff转载 2020-10-30 14:55:21 · 488 阅读 · 0 评论 -
堆外内存 之 DirectByteBuffer 详解
堆外内存堆外内存是相对于堆内内存的一个概念。堆内内存是由JVM所管控的Java进程内存,我们平时在Java中创建的对象都处于堆内内存中,并且它们遵循JVM的内存管理机制,JVM会采用垃圾回收机制统一管理它们的内存。那么堆外内存就是存在于JVM管控之外的一块内存区域,因此它是不受JVM的管控。在讲解DirectByteBuffer之前,需要先简单了解两个知识点java引用类型,因为DirectByteBuffer是通过虚引用(Phantom Reference)来实现堆外内存的释放的。Ph.转载 2020-09-24 19:52:36 · 1086 阅读 · 0 评论 -
文件IO操作的最佳实践
知识点梳理本文主要关注的 Java 相关的文件操作,理解它们需要一些前置条件,比如 PageCache,Mmap(内存映射),DirectByteBuffer(堆外缓存),顺序读写,随机读写…不一定需要完全理解,但至少知道它们是个啥,因为本文将会主要围绕这些知识点来展开描述。初识 FileChannel 和 MMAP首先,文件IO类型的比赛最重要的一点,就是选择好读写文件的方式,那 JAVA 中文件IO有多少种呢?原生的读写方式大概可以被分为三种:普通IO,FileChannel(文件通道),M转载 2020-09-24 18:22:12 · 687 阅读 · 0 评论 -
零拷贝(Zero-copy)及其应用详解
目录前言 传统的数据传输方法 零拷贝的数据传输方法 “基础的”零拷贝机制 对Scatter/Gather的支持 对内存映射(mmap)的支持 零拷贝机制的应用 在Kafka中的应用 在Spark中的应用 The End前言零拷贝(Zero-copy)是一种高效的数据传输机制,在追求低延迟的传输场景中十分常用。本文先通过传统方案引出零拷贝机制,然后分析其细节,最后介绍它的部分应用。文中涉及到的操作系统理论知识都可以参考英文维基或者相关书籍,如Abraham Sil转载 2020-07-27 20:51:24 · 1139 阅读 · 0 评论 -
软引用、弱引用、虚引用-他们的特点及应用场景
为什么会有这4种引用Java中的引用的定义很传统:如果reference类型的数据中存储的数值代表的是另外一块内存的起始地址,就称这块内存代表着一个引用。 这种定义很纯粹,但是太过狭隘,一个对象在这种定义下只有被引用或者没有被引用两种状态,对于如何描述一些“食之无味,弃之可惜”的对象就显得无能为力。 我们希望能描述这样一类对象:当内存空间还足够时,则能保留在内存之中;如果内存空间在进行垃圾收集...转载 2019-09-23 14:41:54 · 154 阅读 · 0 评论 -
一不小心就踩坑的fail-fast是个什么鬼?
一不小心就踩坑的fail-fast是个什么鬼?我在《为什么阿里巴巴禁止在 foreach 循环里进行元素的 remove/add 操作》一文中曾经介绍过Java中的fail-fast机制,但是并没有深入介绍,本文,就来深入介绍一下fail-fast。什么是fail-fast首先我们看下维基百科中关于fail-fast的解释:In systems design, a fail-fa...转载 2019-08-14 18:08:02 · 618 阅读 · 0 评论 -
Java IO流详解
1.什么是IOJava中I/O操作主要是指使用Java进行输入,输出操作.Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列。Java的I/O流提供了读写数据的标准方法。任何Java中表示数据源的对象都会提供以数据流的方式读写它的数据的方法。IO又分为流IO(java.io)和块IO(java.nio)Java.io是大多数面向数...转载 2019-07-31 10:43:58 · 294 阅读 · 0 评论 -
深入解析Java反射(1) - 基础
一、回顾:什么是反射?反射 (Reflection) 是 Java 的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性。Oracle 官方对反射的解释是:Reflection enables Java code to discover information about the fields, methods and constructors o...转载 2018-12-26 18:08:48 · 153 阅读 · 0 评论