- 博客(17)
- 资源 (10)
- 问答 (1)
- 收藏
- 关注
原创 spark源码分析之TaskMemoryManager
概述TaskMemoryManager用于管理每个task分配的内存。在off-heap内存模式中,可以用64-bit的地址来表示内存地址。在on-heap内存模式中,通过base object的引用 和该对象中64-bit 的偏移量来表示内存地址。当我们想要存储其它结构内部的数据结构的指针时,这是一个问题,例如记录hashmap或者sorting buffer的指针。即使我们使用12...
2018-07-31 15:41:57 1728
原创 FutureTask源码分析
Future接口概述Future接口代表异步计算的结果,它提供了检查计算是否完成,取消计算执行,等待计算完成并检索计算结果的方法。如果你出于可取消计算执行的目的使用Future,但又不想返回结果,可以使用Future<?>数据类型,并使用null作为底层任务的返回结果。Future接口定义如下:public interface Future<V> {...
2018-07-29 22:22:28 314
原创 spark源码分析之ReadAheadInputStream
概述ReadAheadInputStream实现了从当前buffer读取的data耗尽时,切换到另外一个buffer读取数据,并启动任务从底层输入流异步预读data,放入耗尽的buffer中。它通过2个buffer来完成——active buffer和read ahead buffer。在调用read()方法时会返回active buffer中的数据。而read ahead buffer用于从...
2018-07-28 11:29:25 628
原创 AbstractQueuedSynchronizer源码分析之共享锁实现
doAcquireShared()方法该方法在共享模式以不响应中断的方式阻塞等待获取锁,实现如下:1、将当前线程封装成节点入队;2、在死循环中调用park方法。第一次循环(自旋、acquire loop),或者被唤醒从park方法返回后,会判断前驱节点是否是头节点,以及调用tryAcquire()方法是否返回true,如果这2个条件都为真,由当前节点自己设置为头节点,并将后继节点唤醒...
2018-07-24 18:02:07 526
原创 Condition源码分析
Condition接口概述condition与Lock的实现类结合使用。 如果Lock替换了synchronized方法和语句的使用,则Condition将替换Object监视方法(wait,notify和notifyAll)的使用。condition,也称为condition queue或者condition variables,能让一个线程阻塞在条件变量上,直到其他线程通知该线程条...
2018-07-20 16:08:54 1618 1
原创 jvm源码分析之interrupt()
概述线程的thread.interrupt()方法是中断线程。中断一个线程意味着在线程完成它的任务之前,停止它当前正在执行的操作。如果线程堵塞在object.wait、Thread.join和Thread.sleep,将会清除线程的中断状态,并抛出InterruptedException;如果线程堵塞在java.nio.channels.InterruptibleChannel的IO上...
2018-07-19 11:54:41 1463
原创 pthread_cond_signal
pthread_cond_broadcast, pthread_cond_signal - broadcast or signal a condition语法#include <pthread.h>int pthread_cond_broadcast(pthread_cond_t *cond);int pthread_cond_signal(pthread_cond_t ...
2018-07-17 11:20:11 8702
原创 pthread_cond_wait
pthread_cond_timedwait()和pthread_cond_wait()函数会阻塞在条件变量上。它们应和互斥锁(mutex lock)一起使用。pthread_cond_wait内部操作这些函数以原子方式释放互斥锁,并导致调用线程阻塞条件变量cond。这里的原子性考虑到了被其它线程获取锁并改变条件变量的情况。也就是,只有在这个线程阻塞了条件变量后,其他线程才能获取获取锁,改变条件变...
2018-07-16 15:22:01 912
转载 java NIO之MappedByteBuffer
简书 占小狼前言java io操作中通常采用BufferedReader,BufferedInputStream等带缓冲的IO类处理大文件,不过java nio中引入了一种基于MappedByteBuffer操作大文件的方式,其读写性能极高,本文会介绍其性能如此高的内部实现原理。内存管理在深入MappedByteBuffer之前,先看看计算机内存管理的几个术语:MMC:CPU的内存管理单元。物理内...
2018-07-15 21:07:56 1129
原创 spark源码分析之NioBufferedFileInputStream
NioBufferedFileInputStream是spark实现的一种新的字节流,它既支持内部缓冲区,又支持nio读取文件,使用direct buffer避免java堆与native内存之间的数据拷贝。在Java jdk中没有可供直接使用的具备以上2个功能的字节流。sun.nio.ch.ChannelInputStream虽然支持使用nio读取一个文件,但是不支持缓冲。
2018-07-10 18:21:48 402
转载 Java NIO之DirectByteBuffer
DirectByteBuffer是Java用于实现堆外内存的一个重要类,我们可以通过该类实现堆外内存的创建、使用和销毁。
2018-07-10 18:04:47 2031 1
转载 Linux mmap
mmap基础概念1.mmap内存映射原理mmap是一种内存映射文件的方法,即将一个文件或者其他对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对应关系;实现这样的映射关系后,进程就可以采用指针的方式读写操作这一块内存,而系统会自动回写脏页面到对应的文件磁盘上,即完成了对文件的操作而不必调用read,write等系统调用函数,相反,内核空间堆这段区域的修改也直接反应到...
2018-07-03 17:50:24 5637
翻译 Linux HighMemory(高端内存)
目前。32位的x86架构是最受欢迎的计算机架构。在这种架构中,传统上Linux内核将4GB的虚拟内存地址空间分为3GB用户内存和1GB内核空间。在传统大小的32位系统上,这意味着内核可以将所有物理内存映射到其地址空间,这使得以下内容成为可能:直接从内核中访问任何内存,这使事情变得更加简单和快捷。使用从内核对象到另一个对象的指针。 另一种方法是跟踪物理地址,映射到物理地址,并在访问之前计算结构的虚拟...
2018-07-03 17:07:11 3315 2
原创 Netty搭建http server
概述HttpRequestDecoder即把 ByteBuf 解码到 HttpRequest 和 HttpContent。 HttpResponseEncoder即把 HttpResponse 或 HttpContent 编码到 ByteBuf。 HttpServerCodec即 HttpRequestDecoder 和 HttpResponseEncoder 的结合。例子...
2018-07-03 16:11:34 2591
转载 Linux epoll实现io多路复用原理
开发高性能网络程序时,windows开发者们言必称iocp,linux开发者们则言必称epoll。大家都明白epoll是一种IO多路复用技术,可以非常高效的处理数以百万计的socket句柄,比起以前的select和poll效率高大发了。我们用起epoll来都感觉挺爽,确实快,那么,它到底为什么可以高速处理这么多并发连接呢?先简单回顾下如何使用C库封装的3个epoll系统调用吧。int epoll_...
2018-07-02 23:34:53 708
原创 jvm源码分析之FileChannel的read/write()方法
BtyeChannelBtyeChannel接口提供对通道进行字节读、写的抽象方法。实际上什么都不做,只是继承了ReadableBtyeChannel接口和WriteableByteChannel。SeekableByteChannelSeekableByteChannel接口继承了ByteChannel,但它还提供了position()、size()等方法。一个Seekab...
2018-07-02 18:10:20 5851
viewpager实现页面导航之三
2015-07-22
viewpager与预编译的点布局实现页面导航效果
2015-07-20
导入第三方类库却出现the importXXX can not be resolved
2015-06-04
TA创建的收藏夹 TA关注的收藏夹
TA关注的人