摘要: 本文转载自JVM 揭秘:一个 class 文件的前世今生 导语 引子:我们都知道,要运行一个包含 main 方法的 java 文件,首先要将其编译成 class 文件,然后加载 JVM 中,就可以运行了,但是这里存在一些疑问,比如编译之后的 class 文件中到底是什么东西呢?JVM 是如何执行 c 阅读全文
posted @ 2020-06-16 22:28 Yungyu 阅读(234) 评论(0) 推荐(0) 编辑
摘要: 本文转载自Java SE7 虚拟机指令操作码助记符 #导语 在Class文件中,Java方法里的方法体,也就是代表着一个Java源码程序中程序的部分存储在方法表集合的Code属性中。存储在Code属性中的是字节码,也就是编译后的程序。Java虚拟机的指令由两部分组成,首先是一个字节长度、代表某种含义 阅读全文
posted @ 2020-06-16 19:56 Yungyu 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 本文转载自C/C++子函数参数传递,堆栈帧、堆栈参数详解 导语 因为参数传递和汇编语言有很大联系,之后会出现较多x86汇编代码。 该文会先讲一下x86的堆栈参数传递过程,然后再分析C/C++子函数是怎样通过堆栈传递参数的。 注:汇编语言的过程和C/C++的子函数是一回事。 寄存器参数,存储器参数和堆 阅读全文
posted @ 2020-06-16 17:10 Yungyu 阅读(1550) 评论(0) 推荐(0) 编辑
摘要: 本文转载自epoll 原理 导语 以前经常被人问道 select、poll、epoll 的区别,基本都是靠死记硬背的,最近正好复习 linux 相关的内容,就把这一块做个笔记吧,以后也能方便查阅。 epoll 是 linux 2.6 之后新出的一种 I/O 多路复用方式,与传统的 select、po 阅读全文
posted @ 2020-06-08 17:37 Yungyu 阅读(786) 评论(0) 推荐(0) 编辑
摘要: 本文转载自epoll原理详解及epoll反应堆模型 导语 设想一个场景:有100万用户同时与一个进程保持着TCP连接,而每一时刻只有几十个或几百个TCP连接是活跃的(接收TCP包),也就是说在每一时刻进程只需要处理这100万连接中的一小部分连接。那么,如何才能高效的处理这种场景呢?进程是否在每次询问 阅读全文
posted @ 2020-06-08 17:21 Yungyu 阅读(1075) 评论(0) 推荐(0) 编辑
摘要: 本文转载自IO多路复用之select、poll、epoll 导语 IO多路复用:通过一种机制,一个进程可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。 应用:适用于针对大量的io请求的情况,对于服务器必须在同时处理来自客户端的大量的io操作的时候,就 阅读全文
posted @ 2020-06-08 16:57 Yungyu 阅读(1458) 评论(0) 推荐(0) 编辑
摘要: 本文转载自Java NIO wakeup实现原理 导语 最近在阅读netty源码时,很好奇Java NIO中Selector的wakeup()方法是如何唤醒selector的,于是决定深扒一下wakeup机制的实现原理,相信对学习NIO是大有裨益的。 wakeup语义 众所周知,selector.s 阅读全文
posted @ 2020-06-08 13:38 Yungyu 阅读(1909) 评论(0) 推荐(1) 编辑
摘要: 本文转载自Linux编程之epoll 导语 现在有这么一个场景:我是一个很忙的大老板,我有100个手机,手机来信息了,我的秘书就会告诉我“老板,你的手机来信息了。”我很生气,我的秘书就是这样子,每次手机来信息就只告诉我来信息了,老板赶紧去看。但是她从来不把话说清楚:到底是哪个手机来信息啊!我可有10 阅读全文
posted @ 2020-06-08 12:08 Yungyu 阅读(244) 评论(0) 推荐(0) 编辑
摘要: 本文转载自Linux IO模式及 select、poll、epoll详解 导语 本文讨论的背景是Linux环境下的network IO。 本文是对众多博客的学习和总结,可能存在理解错误。请带着怀疑的眼光,同时如果有错误希望能指出。 同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别? 阅读全文
posted @ 2020-06-08 11:57 Yungyu 阅读(671) 评论(0) 推荐(0) 编辑
摘要: 本文转载自与程序员相关的CPU缓存知识 基础知识 首先,我们都知道现在的CPU多核技术,都会有几级缓存,老的CPU会有两级内存(L1和L2),新的CPU会有三级内存(L1,L2,L3 ),如下图所示: 其中: L1缓分成两种,一种是指令缓存,一种是数据缓存。L2缓存和L3缓存不分指令和数据。 L1和 阅读全文
posted @ 2020-06-06 15:26 Yungyu 阅读(531) 评论(1) 推荐(0) 编辑
摘要: 本文转载自JDK源码阅读-FileOutputStream 导语 FileOutputStream用户打开文件并获取输出流。 打开文件 public FileOutputStream(File file, boolean append) throws FileNotFoundException { 阅读全文
posted @ 2020-06-06 11:23 Yungyu 阅读(334) 评论(0) 推荐(0) 编辑
摘要: 本文转载自JDK源码阅读-FileInputStream 导语 FileIntputStream用于打开一个文件并获取输入流。 打开文件 我们来看看FileIntputStream打开文件时,做了什么操作: public FileInputStream(File file) throws FileN 阅读全文
posted @ 2020-06-06 11:21 Yungyu 阅读(427) 评论(0) 推荐(0) 编辑
摘要: 本文转载自JDK源码阅读-ByteBuffer 导语 Buffer是Java NIO中对于缓冲区的封装。在Java BIO中,所有的读写API,都是直接使用byte数组作为缓冲区的,简单直接。但是在Java NIO中,缓冲区这一概念变得复杂,可能是对应Java堆中的一块内存,也可能是对应本地内存中的 阅读全文
posted @ 2020-06-06 11:17 Yungyu 阅读(222) 评论(0) 推荐(0) 编辑
摘要: 本文转载自Java如何保证文件落盘? 导语 在之前的文章Linux/UNIX编程如何保证文件落盘中,我们聊了从应用到操作系统,我们要如何保证文件落盘,来确保掉电等故障不会导致数据丢失。JDK也封装了对应的功能,并且为我们做好了跨平台的保证。 JDK中有三种方式可以强制文件数据落盘: 调用FileDe 阅读全文
posted @ 2020-06-06 11:14 Yungyu 阅读(1868) 评论(1) 推荐(1) 编辑
摘要: 本文转载自Linux/UNIX编程如何保证文件落盘 导语 我们编写程序write数据到文件中时,其实数据不会立马写入磁盘,而是会经过层层缓存。每层缓存都有自己的刷新时机,每层缓存都刷新后才会写入磁盘。这些缓存的存在是为了加速读写操作,因为如果每次读写都对应真实磁盘操作,那么读写的效率会大大降低。带来 阅读全文
posted @ 2020-06-06 11:12 Yungyu 阅读(2962) 评论(0) 推荐(0) 编辑
摘要: 本文转载自JDK源码阅读-RandomAccessFile 导语 FileInputStream只能用于读取文件,FileOutputStream只能用于写入文件,而对于同时读取文件,并且需要随意移动文件当前偏移量的话,就需要使用RandomAccessFile这个类了。RandomAccessFi 阅读全文
posted @ 2020-06-06 11:08 Yungyu 阅读(433) 评论(0) 推荐(0) 编辑
摘要: 本文转载自JDK源码阅读-FileDescriptor 导语 操作系统使用文件描述符来指代一个打开的文件,对文件的读写操作,都需要文件描述符作为参数。Java虽然在设计上使用了抽象程度更高的流来作为文件操作的模型,但是底层依然要使用文件描述符与操作系统交互,而Java世界里文件描述符的对应类就是Fi 阅读全文
posted @ 2020-06-06 11:06 Yungyu 阅读(424) 评论(0) 推荐(0) 编辑
摘要: 本文转载自JDK源码阅读-Reference 导语 Java最初只有普通的强引用,只有对象存在引用,则对象就不会被回收,即使内存不足,也是如此,JVM会爆出OOME,也不会去回收存在引用的对象。 如果只提供强引用,我们就很难写出“这个对象不是很重要,如果内存不足GC回收掉也是可以的”这种语义的代码。 阅读全文
posted @ 2020-06-06 11:01 Yungyu 阅读(211) 评论(0) 推荐(0) 编辑
摘要: 本文转载自JDK源码阅读-DirectByteBuffer 导语 在文章JDK源码阅读-ByteBuffer中,我们学习了ByteBuffer的设计。但是他是一个抽象类,真正的实现分为两类:HeapByteBuffer与DirectByteBuffer。HeapByteBuffer是堆内ByteBu 阅读全文
posted @ 2020-06-06 10:56 Yungyu 阅读(306) 评论(0) 推荐(0) 编辑
摘要: 本文转载自文件 I/O 的内核缓冲 导语 从最粗略的角度理解 Linux 文件 I/O 内核缓冲(buffer cache),啰嗦且不严谨。只为了直观理解。 当我们说一个程序读写磁盘上的文件时,通常指的是把磁盘设备上的数据块存储到用户空间内存中(或把用户空间内存的数据存储到磁盘设备上)。 然而,程序 阅读全文
posted @ 2020-06-05 19:33 Yungyu 阅读(1985) 评论(0) 推荐(0) 编辑