06 2020 档案
摘要:本文转载自WebSocket 教程 为什么需要 WebSocket? 初次接触 WebSocket 的人,都会问同样的问题:我们已经有了 HTTP 协议,为什么还需要另一个协议?它能带来什么好处? 答案很简单,因为 HTTP 协议有一个缺陷:通信只能由客户端发起。 举例来说,我们想了解今天的天气,只
阅读全文
摘要:本文转载自Java 优雅地退出程序 导语 很多情况下,我们的程序需要在操作系统 后台 一直运行,这在程序代码里的实现就是用死循环 ( while (true) ) 来实现的。但是,这样会出现一个问题,就是我们想要关闭程序怎么办?如果用暴力结束进程方式,那程序的内存中若还有未输出的数据,这部分数据将会
阅读全文
摘要:标准参数(-) 所有的JVM实现都必须实现这些参数的功能,而且向后兼容。 通过命令 java 查看如下: 用法: java [-options] class [args...] (执行类) 或 java [-options] -jar jarfile [args...] (执行 jar 文件) 其中
阅读全文
摘要:本文转载自深入理解Java内存模型JMM JMM基础与happens-before 并发编程模型的分类 在并发编程中,我们需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体)。通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享
阅读全文
摘要:本文转载自Linux Used内存到底哪里去了? 前几天 纯上 同学问了一个问题: 我ps aux看到的RSS内存只有不到30M,但是free看到内存却已经使用了7,8G了,已经开始swap了,请问ps aux的实际物理内存统计是不是漏了哪些内存没算?我有什么办法确定free中used的内存都去哪儿
阅读全文
摘要:本文转载自java安全管理器SecurityManager 导语 这是一篇对Java安全管理器入门的文章,目的是简单了解什么是SecurityManager,对管理器进行简单配置,解决简单问题。 比如在阅读源码的时候,发现这样的代码,想了解是做什么的: SecurityManager securit
阅读全文
摘要:本文转载自哪些原因会导致JAVA进程退出? 导语 JAVA进程消失可能有哪些原因? 那我们就开一篇文章说一下这个问题,其实很easy的,无外乎三种情况。 linux的OOM killer杀死 JVM自身故障 jvm的OOM导致进程退出(很罕见,我至今没遇见过) linux的OOM killer Li
阅读全文
摘要:本文转载自深入理解JDK中的Reference原理和源码实现 前提 这篇文章主要基于JDK11的源码和最近翻看的《深入理解Java虚拟机-2nd》一书的部分内容,对JDK11中的Reference(引用)做一些总结。值得注意的是,通过笔者对比一下JDK11和JDK8对于java.lang.ref包的
阅读全文
摘要:本文转载自HTTP2 的前世今生 #导语 作为一名 Web 后端开发工程师,无论是工作中,还是面试时,对于 HTTP 协议的理解都是必不可少的。而 HTTP2 协议的发布更是解决了 HTTP1.1 协议中一系列的问题。这篇文章是根据我在团队的一次技术分享改编而来,里面介绍了 HTTP/1.0 和 H
阅读全文
摘要:本文转载自HTTP 协议中的并发限制及队首阻塞问题 串行连接 HTTP/0.9 和早期的 HTTP/1.0 协议对 HTTP 请求处理是串行化的。假如一个页面包含 3 个样式文件,同属于一个协议、域名、端口。那么,浏览器一共需要发起四次请求,并且每次只能打开一个 TCP 通道,在一个请求资源完成下载
阅读全文
摘要:本文转载自聊聊JMM 什么是JMM JMM (Java Memory Model )Java内存模型是一个语言级别的内存模型抽象,它屏蔽了底层硬件实现内存一致性需求的差异,提供了对上层的统一的接口来提供保证内存一致性的编程能力。 Java作为一个跨平台的语言,Java内存模型作为一个中间层模型,它适
阅读全文
摘要:本文转载自聊聊CacheLine 导语 文章聊聊缓存一致性协议中我们提到过,缓存里面最小的单位是缓存行/缓存条目,但是缓存中的具体存储结构是什么样的,缓存行中有存放的是什么?在缓存中是如何寻找指定是还是还存在?本篇我们就聊聊一下Cache Line 缓存中的组构 文章中出现的缓存和Cache,指的是
阅读全文
摘要:本文转载自聊聊CPU的LOCK指令 导语 在多线程操作中,可能最经常被提起的就是数据的可见性、原子性、有序性。不管是硬件方面、软件方面都在这三方面做了很足的工作,才能保证程序的正常运行。 之前发表过一篇文章聊聊缓存一致性协议 如果感兴趣的话可以去阅读一下,里面谈到了缓存一致性的实现和处理过程,读完之
阅读全文
摘要:本文转载自聊聊内存屏障 #导语 在之前文章聊聊JMM,说到了内存屏障,内存屏障在Java语言实现一致性内存模型上起到了重要的作用,本文我们一起聊一聊内存屏障 内存屏障是什么 在cpu执行指令的过程中,对于同一个线程中没有数据依赖的指令可以重新排序优化,有数据依赖的指令按照顺序串行执行,来保证单线程程
阅读全文
摘要:本文转载自Java volatile 关键字底层实现原理解析 导语 在Java多线程并发编程中,volatile关键词扮演着重要角色,它是轻量级的synchronized,在多处理器开发中保证了共享变量的**“可见性”**。“可见性”的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的
阅读全文
摘要:本文转载自volatile关键字?MESI协议?指令重排?内存屏障?这都是啥玩意 摘要 三级缓存,MESI缓存一致性协议,指令重排,内存屏障,JMM,volatile。单拿一个出来,想必大家对这些概念应该有一定了解。但是这些东西有什么必然的联系,或者他们之间究竟有什么前世今生想必是困扰大家的一个问题
阅读全文
摘要:本文转载自聊聊缓存一致性协议 什么缓存一致问题 在谈缓存一致性协议之前我们先了解一下缓存一致性问题是什么,它是怎么出现的。 现在处理器处理能力上要远胜于主内存(DRAM),主内存执行一次内存读写操作,所需的时间可能足够处理器执行上百条的指令,为了弥补处理器与主内存处理能力之间的鸿沟,引入了高速缓(C
阅读全文
摘要:本文转载自JVM杂谈之JIT 导语 JIT技术是JVM中最重要的核心模块之一。我的课程里本来没有计划这一篇,但因为不断有朋友问起,Java到底是怎么运行的?既然Hotspot是C写的,那Java是不是可以说运行在C之上呢?为了澄清这些概念,我才想起来了加了这样一篇文章,算做番外篇吧。 Just In
阅读全文
摘要:本文转载自java 泛型详解 概述 泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用。 什么是泛型?为什么要使用泛型? 泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体
阅读全文
摘要:本文转载自Java中的逆变与协变 导语 看下面一段代码 Number num = new Integer(1); ArrayList<Number> list = new ArrayList<Integer>(); //type mismatch List<? extends Number> lis
阅读全文
摘要:本文转载自疯狂的String 导语 在java中字符串是我们比较常用的一个类型,字符串是不可变的,类被声明为final , 存储字符的char[] value数据也被声明为final ,我们对String真的了解么?我们看一下String是有多么的疯狂。本文中是在JDK8下面测试,不同的JDK可能会
阅读全文
摘要:本文转载自java中synchronized与Lock的异同 前言 synchronized和Lock通过互斥保障原子性,能够保护共享数据以实现线程安全,其作用包括保障原子性、可见性、有序性 常见问题 在平时聊天或者面试过程中,可能会被问到,既然已经有了synchronized了,为什么JSR166
阅读全文
摘要:本文转载自不使用的大对象为什么要手动设置null,真的有效吗? 导语 在我们开发过程中,对于大的对象使用过后,为了help gc ,我们会手动将大对象置为null,背后的原理是什么,是不是最佳的实践。 案例一 首先我们先看一段代码 package com.bk.exercise.stack; /**
阅读全文
摘要:本文转载自不使用反射如何调用某个实例对象的方法 导语 如何调用一个对象的方法?我们可以通过实例化对象直接调用、使用反射机制、通过代理对象等,本文介绍一种新的方法MethodHandle,这种方法在开发中很少会用到,但使用起来感觉很顺手。 什么是MethodHandle? MethodHandle是J
阅读全文
摘要:本文转载自JVM 字节码之 int 入栈指令(iconst、bipush、sipush、ldc) 前言 本文介绍 int 入栈指令 iconst、bipush、sipubh、Idc。 当 int 取值 -15 采用 iconst 指令,取值 -128127 采用 bipush 指令,取值 -3276
阅读全文
摘要:本文转载自Linux系统下CPU使用(load average)梳理 导语 在平时的运维工作中,当一台服务器的性能出现问题时,通常会去看当前的CPU使用情况,尤其是看下CPU的负载情况(load average)。对一般的系统来说,根据cpu数量去判断。比如有2颗cup的机器。如果平均负载始终在1.
阅读全文
摘要:本文转载自深入理解linux系统下proc文件系统内容 导语 Linux系统上的/proc目录是一种文件系统,即proc文件系统。与其它常见的文件系统不同的是,/proc是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,用户可以通过这些文件查看有关系统硬件及当前正在运行
阅读全文
摘要:本文转载自CPU飙升的问题 问题发现 事情是这样的,最近小码仔负责的项目预定今天凌晨2点上进行版本更新。前几天测试小姐姐对网站进行压力测试,观察服务的CPU、内存、load、RT、QPS等各种指标。 在压测的过程中,测试小姐姐发现我们其中一个接口,在QPS上升到400以后,CPU利用率急剧升高。 在
阅读全文
摘要:本文转载自理解系统负载 导语 top 或 uptime 等命令会输出系统的平均负载 (Load Average),一般会有三个值,分别代表 1 分钟,5 分钟和 15 分钟的平均负载。那“负载”又是什么含义呢? 一般搜索得到的结果都会有一个“桥”或是“公路”的类比,虽然形象但却不准确,其实直接阅读维
阅读全文
摘要:本文转载自CPU使用率原理及计算方式 CPU:超线程和多核 超线程(Hyper-Threading ) 超线程是Intel最早提出一项技术,最早出现在2002年的Pentium4上。单个采用超线程的CPU对于操作系统来说就像有两个逻辑CPU,为此P4处理器需要多加入一个Logical CPU Poi
阅读全文
摘要:本文转载自使用stress进行压力测试 导语 stress,顾名思义是一款压力测试工具。你可以用它来对系统CPU,内存,以及磁盘IO生成负载。 安装stress 几乎所有主流的linux发行版的软件仓库中都收录有stress,可以直接使用包管理起来安装 sudo pacman -S stress -
阅读全文
摘要:本文转载自线上CPU飙升100%问题排查 引子 对于互联网公司,线上CPU飙升的问题很常见(例如某个活动开始,流量突然飙升时),按照本文的步骤排查,基本1分钟即可搞定!特此整理排查方法一篇,供大家参考讨论提高。 问题复现 线上系统突然运行缓慢,CPU飙升,甚至到100%,以及Full GC次数过多,
阅读全文
摘要:本文转载自Linux零拷贝技术 导语 本文讲解 Linux 的零拷贝技术,云计算是一门很庞大的技术学科,融合了很多技术,Linux 算是比较基础的技术,所以,学好 Linux 对于云计算的学习会有比较大的帮助。 为什么需要零拷贝 传统的 Linux 系统的标准 I/O 接口(read、write)是
阅读全文
摘要:本文转载自Java线程池实现原理及其在美团业务中的实践 导语 随着计算机行业的飞速发展,摩尔定律逐渐失效,多核CPU成为主流。使用多线程并行计算逐渐成为开发人员提升服务器性能的基本武器。J.U.C提供的线程池:ThreadPoolExecutor类,帮助开发人员管理线程并方便地执行并行任务。了解并合
阅读全文
摘要:本文转载自深入解析String#intern 导语 在 JAVA 语言中有8中基本类型和一种比较特殊的类型String。这些类型为了使他们在运行过程中速度更快,更节省内存,都提供了一种常量池的概念。常量池就类似一个JAVA系统级别提供的缓存。 8种基本类型的常量池都是系统协调的,String类型的常
阅读全文
摘要:本文转载自ASM的基础用法 导语 新闻里使用的热补丁修复方案是基于AspectJ,AspectJ是AOP的一种实现。 无意接触到一种小巧轻便的Java字节码操控框架ASM,它也能方便地生成和改造Java代码。 本文主要分为几个部分: 什么是ASM; 为什么要动态生成Java类; 为什么选择ASM;
阅读全文
摘要:本文转载自Java对象内存布局 导语 首先直接抛出问题 Unsafe.getInt(obj, fieldOffset)中的fieldOffset是什么, 类似还有compareAndSwapX(obj, fieldOffset, oldValue, newValue)? 如何实现原子读, 原子写的
阅读全文
摘要:本文转载自glibc内存管理那些事儿 Linux内存空间简介 32位Linux平台下进程虚拟地址空间分布如下图: 进程虚拟地址空间分布 图中,0xC0000000开始的最高1G空间是内核地址空间,剩下3G空间是用户态空间。用户态空间从上到下依次为stack栈(向下增长)、mmap(匿名文件映射区)、
阅读全文
摘要:本文转载自一次"内存泄漏"引发的血案 导语 2017年末,手Q春节红包项目期间,为保障活动期间服务正常稳定,我对性能不佳的Ark Server进行了改造和重写。重编发布一段时间后,结果发现新发布的Svr的机器内存一直在上涨。如下图示: 内存增长趋势图 观察后,第一反应是完了,一定存在内存泄漏。花了3
阅读全文
摘要:本文转载自字节码增强技术-Byte Buddy 为什么需要在运行时生成代码? Java 是一个强类型语言系统,要求变量和对象都有一个确定的类型,不兼容类型赋值都会造成转换异常,通常情况下这种错误都会被编译器检查出来,如此严格的类型在大多数情况下是比较令人满意的,这对构建具有非常强可读性和稳定性的应用
阅读全文
摘要:本文转载自Byte Buddy学习笔记 简介 Byte Buddy是一个JVM的运行时代码生成器,你可以利用它创建任何类,且不像JDK动态代理那样强制实现一个接口。Byte Buddy还提供了简单的API,便于手工、通过Java Agent,或者在构建期间修改字节码。 Java反射API可以做很多和
阅读全文
摘要:本文转载自Java魔法类:Unsafe应用解析 前言 Unsafe是位于sun.misc包下的一个类,主要提供一些用于执行低级别、不安全操作的方法,如直接访问系统内存资源、自主管理内存资源等,这些方法在提升Java运行效率、增强Java语言底层资源操作能力方面起到了很大的作用。但由于Unsafe类使
阅读全文
摘要:本文转载自JVM Attach实现原理剖析 前言 本文旨在从理论上分析JVM 在 Linux 环境下 Attach 操作的前因后果,以及 JVM 为此而设计并实现的解决方案,通过本文,我希望能够讲述清楚如下三个主要方面的内容。 Attach 为什么而出现 Attach的出现究其根本原因,应该就是为了
阅读全文
摘要:本文转载自Java 动态调试技术原理及实践 导语 断点调试是我们最常使用的调试手段,它可以获取到方法执行过程中的变量信息,并可以观察到方法的执行路径。但断点调试会在断点位置停顿,使得整个应用停止响应。在线上停顿应用是致命的,动态调试技术给了我们创造新的调试模式的想象空间。本文将研究Java语言中的动
阅读全文
摘要:本文转载自动态代理方案性能对比 导语 因服务框架需要用动态代理生成客户端接口的stub,所以做了一下性能评测, 动态代理工具比较成熟的产品有: JDK自带的,ASM,CGLIB(基于ASM包装),JAVAASSIST, 使用的版本分别为: JDK-1.6.0_18-b07, ASM-3.3, CGL
阅读全文
摘要:本文转载自javassist 实现动态代理 导语 动态代理是指在运行时动态生成代理类。 常见的动态代理生成方式有: JDK动态代理 Apache BCEL (Byte Code Engineering Library):是Java classworking广泛使用的一种框架,它可以深入到JVM汇编语
阅读全文
摘要:本文转载自JVM 揭秘:一个 class 文件的前世今生 导语 引子:我们都知道,要运行一个包含 main 方法的 java 文件,首先要将其编译成 class 文件,然后加载 JVM 中,就可以运行了,但是这里存在一些疑问,比如编译之后的 class 文件中到底是什么东西呢?JVM 是如何执行 c
阅读全文
摘要:本文转载自Java SE7 虚拟机指令操作码助记符 #导语 在Class文件中,Java方法里的方法体,也就是代表着一个Java源码程序中程序的部分存储在方法表集合的Code属性中。存储在Code属性中的是字节码,也就是编译后的程序。Java虚拟机的指令由两部分组成,首先是一个字节长度、代表某种含义
阅读全文
摘要:本文转载自C/C++子函数参数传递,堆栈帧、堆栈参数详解 导语 因为参数传递和汇编语言有很大联系,之后会出现较多x86汇编代码。 该文会先讲一下x86的堆栈参数传递过程,然后再分析C/C++子函数是怎样通过堆栈传递参数的。 注:汇编语言的过程和C/C++的子函数是一回事。 寄存器参数,存储器参数和堆
阅读全文
摘要:本文转载自epoll 原理 导语 以前经常被人问道 select、poll、epoll 的区别,基本都是靠死记硬背的,最近正好复习 linux 相关的内容,就把这一块做个笔记吧,以后也能方便查阅。 epoll 是 linux 2.6 之后新出的一种 I/O 多路复用方式,与传统的 select、po
阅读全文
摘要:本文转载自epoll原理详解及epoll反应堆模型 导语 设想一个场景:有100万用户同时与一个进程保持着TCP连接,而每一时刻只有几十个或几百个TCP连接是活跃的(接收TCP包),也就是说在每一时刻进程只需要处理这100万连接中的一小部分连接。那么,如何才能高效的处理这种场景呢?进程是否在每次询问
阅读全文
摘要:本文转载自IO多路复用之select、poll、epoll 导语 IO多路复用:通过一种机制,一个进程可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。 应用:适用于针对大量的io请求的情况,对于服务器必须在同时处理来自客户端的大量的io操作的时候,就
阅读全文
摘要:本文转载自Java NIO wakeup实现原理 导语 最近在阅读netty源码时,很好奇Java NIO中Selector的wakeup()方法是如何唤醒selector的,于是决定深扒一下wakeup机制的实现原理,相信对学习NIO是大有裨益的。 wakeup语义 众所周知,selector.s
阅读全文
摘要:本文转载自Linux编程之epoll 导语 现在有这么一个场景:我是一个很忙的大老板,我有100个手机,手机来信息了,我的秘书就会告诉我“老板,你的手机来信息了。”我很生气,我的秘书就是这样子,每次手机来信息就只告诉我来信息了,老板赶紧去看。但是她从来不把话说清楚:到底是哪个手机来信息啊!我可有10
阅读全文
摘要:本文转载自Linux IO模式及 select、poll、epoll详解 导语 本文讨论的背景是Linux环境下的network IO。 本文是对众多博客的学习和总结,可能存在理解错误。请带着怀疑的眼光,同时如果有错误希望能指出。 同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?
阅读全文
摘要:本文转载自与程序员相关的CPU缓存知识 基础知识 首先,我们都知道现在的CPU多核技术,都会有几级缓存,老的CPU会有两级内存(L1和L2),新的CPU会有三级内存(L1,L2,L3 ),如下图所示: 其中: L1缓分成两种,一种是指令缓存,一种是数据缓存。L2缓存和L3缓存不分指令和数据。 L1和
阅读全文
摘要:本文转载自JDK源码阅读-FileOutputStream 导语 FileOutputStream用户打开文件并获取输出流。 打开文件 public FileOutputStream(File file, boolean append) throws FileNotFoundException {
阅读全文
摘要:本文转载自JDK源码阅读-FileInputStream 导语 FileIntputStream用于打开一个文件并获取输入流。 打开文件 我们来看看FileIntputStream打开文件时,做了什么操作: public FileInputStream(File file) throws FileN
阅读全文
摘要:本文转载自JDK源码阅读-ByteBuffer 导语 Buffer是Java NIO中对于缓冲区的封装。在Java BIO中,所有的读写API,都是直接使用byte数组作为缓冲区的,简单直接。但是在Java NIO中,缓冲区这一概念变得复杂,可能是对应Java堆中的一块内存,也可能是对应本地内存中的
阅读全文
摘要:本文转载自Java如何保证文件落盘? 导语 在之前的文章Linux/UNIX编程如何保证文件落盘中,我们聊了从应用到操作系统,我们要如何保证文件落盘,来确保掉电等故障不会导致数据丢失。JDK也封装了对应的功能,并且为我们做好了跨平台的保证。 JDK中有三种方式可以强制文件数据落盘: 调用FileDe
阅读全文
摘要:本文转载自Linux/UNIX编程如何保证文件落盘 导语 我们编写程序write数据到文件中时,其实数据不会立马写入磁盘,而是会经过层层缓存。每层缓存都有自己的刷新时机,每层缓存都刷新后才会写入磁盘。这些缓存的存在是为了加速读写操作,因为如果每次读写都对应真实磁盘操作,那么读写的效率会大大降低。带来
阅读全文
摘要:本文转载自JDK源码阅读-RandomAccessFile 导语 FileInputStream只能用于读取文件,FileOutputStream只能用于写入文件,而对于同时读取文件,并且需要随意移动文件当前偏移量的话,就需要使用RandomAccessFile这个类了。RandomAccessFi
阅读全文
摘要:本文转载自JDK源码阅读-FileDescriptor 导语 操作系统使用文件描述符来指代一个打开的文件,对文件的读写操作,都需要文件描述符作为参数。Java虽然在设计上使用了抽象程度更高的流来作为文件操作的模型,但是底层依然要使用文件描述符与操作系统交互,而Java世界里文件描述符的对应类就是Fi
阅读全文
摘要:本文转载自JDK源码阅读-Reference 导语 Java最初只有普通的强引用,只有对象存在引用,则对象就不会被回收,即使内存不足,也是如此,JVM会爆出OOME,也不会去回收存在引用的对象。 如果只提供强引用,我们就很难写出“这个对象不是很重要,如果内存不足GC回收掉也是可以的”这种语义的代码。
阅读全文
摘要:本文转载自JDK源码阅读-DirectByteBuffer 导语 在文章JDK源码阅读-ByteBuffer中,我们学习了ByteBuffer的设计。但是他是一个抽象类,真正的实现分为两类:HeapByteBuffer与DirectByteBuffer。HeapByteBuffer是堆内ByteBu
阅读全文
摘要:本文转载自文件 I/O 的内核缓冲 导语 从最粗略的角度理解 Linux 文件 I/O 内核缓冲(buffer cache),啰嗦且不严谨。只为了直观理解。 当我们说一个程序读写磁盘上的文件时,通常指的是把磁盘设备上的数据块存储到用户空间内存中(或把用户空间内存的数据存储到磁盘设备上)。 然而,程序
阅读全文
摘要:本文转载自零拷贝 - 用户态分析 导语 现在几乎所有人都听过 Linux 下的零拷贝技术,但我经常遇到对这个问题不能深入理解的人。所以我写了这篇文章,来深入研究这些问题。本文通过用户态程序的角度来看零拷贝,因此我有意忽略了内核级别的实现。 什么是 “零拷贝” ? 为了更好的理解这个问题,我们首先需要
阅读全文
摘要:本文转载自文件和零拷贝 文件概述 文件描述符 文件描述符:在Linux中,所有的文件都是通过文件描述符引用。fd是一个非负整数。按照惯例,标准输入的fd是0,标准输出的fd是1,标准错误的fd是2。分别作为STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO定义在unis
阅读全文
摘要:本文转载自从几个问题开始理解CFS调度器 导语 CFS(完全公平调度器)是Linux内核2.6.23版本开始采用的进程调度器,它的基本原理是这样的:设定一个调度周期(sched_latency_ns),目标是让每个进程在这个周期内至少有机会运行一次,换一种说法就是每个进程等待CPU的时间最长不超过这
阅读全文
摘要:本文转载自ext文件系统机制原理剖析 导语 将磁盘进行分区,分区是将磁盘按柱面进行物理上的划分。划分好分区后还要进行格式化,然后再挂载才能使用(不考虑其他方法)。格式化分区的过程其实就是创建文件系统。 文件系统的类型有很多种,如CentOS 5和CentOS 6上默认使用的ext2/ext3/ext
阅读全文
摘要:本文转载自文件描述符(File Descriptor)简介 导语 维基百科:文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往
阅读全文
摘要:本文转载自Linux文件/proc/net/tcp分析 导语 /proc/net/tcp文件提供了tcp的连接信息,是由net/ipv4/tcp_ipv4.c中的tcp4_seq_show()实现信息打印的 本文内容来源于linux官方文档proc_net_tcp.txt 官方文档解释 proc_n
阅读全文
摘要:本文转载自为什么系统调用会消耗较多资源 导语 系统调用是计算机程序在执行的过程中向操作系统内核申请服务的方法,这可能包含硬件相关的服务、新进程的创建和执行以及进程调度,对操作系统稍微有一些了解的人都知道 — 系统调用为用户程序提供了操作系统的接口。 图 1 - 操作系统接口 C 语言的著名的 gli
阅读全文
摘要:本文转载自为什么 Linux 默认页大小是 4KB 导语 我们都知道 Linux 会以页为单位管理内存,无论是将磁盘中的数据加载到内存中,还是将内存中的数据写回磁盘,操作系统都会以页面为单位进行操作,哪怕我们只向磁盘中写入一个字节的数据,我们也需要将整个页面中的全部数据刷入磁盘中。 Linux 同时
阅读全文
摘要:本文转载自为什么 Linux 需要虚拟内存 导语 操作系统中的 CPU 和主内存(Main memory)都是稀缺资源,所有运行在当前操作系统的进程会共享系统中的 CPU 和内存资源,操作系统会使用 CPU 调度器分配 CPU 时间1并引入虚拟内存系统以管理物理内存,本文会分析操作系统为什么需要虚拟
阅读全文
摘要:本文转载自Make 命令教程 导语 代码变成可执行文件,叫做编译(compile);先编译这个,还是先编译那个(即编译的安排),叫做构建(build)。 Make是最常用的构建工具,诞生于1977年,主要用于C语言的项目。但是实际上 ,任何只要某个文件有变化,就要重新构建的项目,都可以用Make构建
阅读全文
摘要:本文转载自关于同步的一点思考-下 导语 在<关于同步的一点思考-上>中介绍了几种实现锁的方式以及linux底层futex的实现原理 ReentrantLock的实现网上有很多文章了,本篇文章会简单介绍下其java层实现,重点放在分析竞争锁失败后如何阻塞线程。 因篇幅有限,synchronized的内
阅读全文
摘要:本文转载自关于同步的一点思考-上 导语 线程同步可以说在日常开发中是用的很多, 但对于其内部如何实现的,一般人可能知道的并不多。 本篇文章将从如何实现简单的锁开始,介绍linux中的锁实现futex的优点及原理,最后分析java中同步机制如wait/notify, synchronized, Ree
阅读全文
摘要:本文转载自Linux下的进程控制块(PCB) 导语 进程在操作系统中都有一个户口,用于表示这个进程。这个户口操作系统被称为PCB(进程控制块),在linux中具体实现是 task_struct数据结构。 说明 进程控制块(PCB)(系统为了管理进程设置的一个专门的数据结构,用它来记录进程的外部特征,
阅读全文
摘要:本文转载自汇编语言基础:寄存器和系统调用 寄存器 寄存器是处理器临时保存数据指令的的一部分。在x86_64架构中,寄存器能处理高达64位的数据。这意味着每个寄存器都可以保存该值 没符号整数:0〜18,446,744,073,709,551,616 有符号整数:-9,223,372,036,854,7
阅读全文
摘要:本文转载自内核栈与thread_info结构详解 什么是进程的内核栈? 在内核态(比如应用进程执行系统调用)时,进程运行需要自己的堆栈信息(不是原用户空间中的栈),而是使用内核空间中的栈,这个栈就是进程的内核栈 进程的内核栈在计算机中是如何描述的? linux中进程使用task_struct数据结构
阅读全文