- 博客(18)
- 资源 (4)
- 收藏
- 关注
原创 Jetty系列: 02- Server的启动流程分析
最简单情况下的启动流程在上一次的博客中, 我们简单介绍了Jetty的使用, 现在我们来研究一下Jetty的启动. 这里使用完全一样的代码, 监听本地所有网卡的8080端口, 开启文件浏览服务, 浏览的起始路径和服务启动目录是同一个地方. public static void main(String[] args) { Server server = new Server(80
2017-11-17 14:26:10
1692
原创 Jetty系列: 01- 基本使用和简单介绍
为什么要写这个系列故事的开头要从博主两年前做的一个需求开始. 当时我在公司的Android项目组做开发, app要加一个免流量分享应用的功能. 应用场景是这样: 我手机上装了一个app, 现在要传给你, 不耗费双方的上网流量. 怎么做呢? 过程是这样:我在手机上开一个WiFi热点, app内部起一个web服务, 把web服务的地址生成二维码. 你扫这个二维码, 得到一个网址, 如:http:/
2017-11-15 14:57:34
937
原创 关于Android下FFmpeg配合libx264 NEON默认开启的验证
起因近期工作涉及到在android上做视频编码, 除了利用系统自带的MediaCodec做硬编码外, 同时需要软编码以保证适配性. 由于编码对CPU的消耗比较大, 自然就想到要开启arm NEON的优化. 而之前接触WebRtc代码的时候发现, 其中的信号处理函数在初始化时, 会动态判断当前的CPU版本来决定加载普通指令版本还是加载NEON指令的版本. 而从x264的代码来看, 发现默认针对arm编
2017-04-28 13:52:46
2145
3
原创 Linux Kernel - read系统调用
系列目录传送门Linux Kernel - 文件系统系列read系统调用文件系统作为连接用户数据和磁盘等块存储设备的中间层, 必须提供数据的读取和写入接口, 而read系统调用就是用来完成数据读取功能的. 在上一篇Linux Kernel - open系统调用中了解到, 通过open系统调用, 内核分配了文件描述符和file文件对象, 并将它们关联起来, 同时把文件描述符返回到应用层, 作为所打开文
2017-03-01 10:59:37
6662
原创 CentOs 6.5下 nginx + php + mysql环境组建
本次搭建主要是想试一试php的环境部署, nginx做服务接收端, php做请求处理, mysql作为数据库支持. 因此安装主要围绕这三个组件安装进行, 再把他们串联起来, 最后在浏览器通过访问php页面展示mysql数据库中的记录, 完成本次实践. MySql和nginx之前玩过, php是第一次接触, 所以php环境搭建也是第一次, 记录以备忘. 搭建环境是CentOs 6
2017-02-20 15:02:49
743
原创 Linux Kernel - open系统调用
系列目录传送门Linux Kernel - 文件系统系列open系统调用简介open系统调用相信大家都不会陌生, ‘Everything is a file - 一切皆是文件’, 是Unix的一个设计特点, 和Unix有着密切关系的Linux也不例外. 设备是文件, 数据是文件, 连socket也是文件. 文件的抽象把数据的特性抽离了出来, 使得对系统编码和理解系统大大简化.代码示例:int mai
2016-12-13 12:10:57
3410
原创 Linux Kernel - mount系统调用
mount系统调用简介玩过linux的同学对mount系统调用都不会陌生, shell命令mount正是调用内核中的sys_mount函数完成文件系统的挂载. 比如下面的命令: lqp@lqp-ThinkPad-T540p:~/mnt$ sudo mkfs.minix /dev/ram0 21856 inodes 65535 blocks Firstdatazone=696
2016-12-07 17:07:50
2013
原创 Linux Kernel - mknod系统调用
mknod简介mknod是用来创建特殊设备文件的系统调用, 在Linux Kernel - 探索Ram Disk 驱动(1) - 体验使用中, 我们通过在/dev/ram0的设备文件创建文件系统后, 访问我们挂载的Ram Disk设备. 与普通意义上的文件不同, 对一个设备的读写实质上会调用到设备驱动提供的读写函数, 进而和设备产生交互. lqp@lqp-ThinkPad-T540p:~$ ls
2016-12-07 11:01:26
1334
原创 Linux Kernel - 文件系统系列纲要
写在开头在Linux Kernel - 探索Ram Disk 驱动(1) - 体验使用 和 Linux Kernel - 探索Ram Disk 驱动(2) - 源码探索 中, 我们探索了好玩的Ram Disk底层实现. 从直觉上来说, 我们能够理解数据是怎么通过文件系统写入到最后的内存中了, 但是具体对于用户程序是如何一步步通过系统调用和底层驱动交互的, 现在还是一片迷雾. 因此, 本着趁热好打
2016-12-06 15:56:25
737
原创 Linux Kernel - 探索Ram Disk 驱动(2) - 源码探索
继续前行接着上一篇 Linux Kernel - 探索Ram Disk 驱动(1) - 体验使用 , 我们来看一看Ram Disk驱动的实现.代码源文件位于: drivers/block/brd.c, 总共不到700行, 至少从数字上来说, 看起来不麻烦. 在看代码之前, 我们可以思考一下设备具有的功能, 这样带着问题思考可能更有效率. 对于块设备来说, 无非就是读取一个块, 写入数据到一个块.
2016-12-02 15:17:01
1343
原创 Linux Kernel - 探索Ram Disk 驱动(1) - 体验使用
我不是专业的内核玩家, 对于内核也是平时有兴趣了看一看, 这里写下来的东西主要为了把学习之路上的风景记录一二, 当然了, 如果能够给你带来帮助, 那就算是意外收获了
2016-12-01 17:46:53
1493
原创 [Java JVM] Hotspot GC研究- 串行GC(Serial GC)实现解析
Serial GC 介绍串行GC是hotspot中最简单的一种GC, 不过麻雀虽小, 五脏俱全. 除了速度相较其他几种GC比较慢之外, 完成的功能是一样的: 回收不再使用的对象, 为新的对象分配空间. 从简单的情况下手, 我们可以撇去很多边边角角的细节, 从而更好的接近事物的本质, 对于研究GC, 道理也是如此.Serial GC 的内存分布Serial GC的heap采用的是分代分布, 默认情况下
2016-09-07 15:05:19
1219
原创 [Java JVM] Hotspot GC研究- 探寻GC代码前的最后准备, GC的维度和分类
关于GC的几个维度吞吐量(Throughput), 简而言之就是花在GC之外的时间(干 ‘正事’的时间)和程序整体运行时间的比值. 举写代码为例, 一位连续编码7天, 需要花1天时间来休息的程序员, 相比于编码1天就要休息1天的程序员来说, 显然前者的吞吐量更大.停顿时间(Pause Time), GC执行的时候有可能需要打断应用执行, 比如GC安全点, 对应用来说就是被冻住了, 不能响应. 所
2016-09-03 14:19:14
510
原创 Java下CAS(Compare And Swap)并发操作测试
测试目的据我的了解, 在高并发环境下, 为了减少锁的开销(睡眠, 线程上下文切换), 采用的是无锁编程(lockless), 而无锁编程的基础是CAS操作, 那么CAS操作在高并发下的效果怎样, 怎么尽量避免并发带来的问题.测试的Java代码:package com.lqp.test;import java.util.concurrent.atomic.AtomicLong;public class
2016-08-30 16:51:36
787
原创 [Java JVM] Hotspot GC研究- 什么是GC Root
GC RootGC Root全称是garbage collection root, 即垃圾回收的根. 回到我们的葡萄比喻上来, 也就是一串葡萄的柄. 实际上JVM中的GC Root不只一个, 也就是多个这样的 “柄”. 来看看hotspot网站的解释: garbage collection root A pointer into the Java object heap from ou
2016-08-27 15:17:38
1956
1
原创 [Java JVM] Hotspot GC研究- GC安全点 (Safepoint&Stop The World)
什么是safepoint引用openjdk官网的一段话: A point during program execution at which all GC roots are known and all heap object contents are consistent. From a global point of view, all threads must block at a saf
2016-08-19 11:56:31
6601
1
原创 [Java JVM] Hotspot GC研究- 64位引用指针压缩技术
为什么需要指针压缩在上一篇文章 [Java JVM] Hotspot GC研究- 开篇&对象内存布局 中介绍对象内存布局时, 曾提到过, 由于在64位CPU下, 指针的宽度是64位的, 而实际的heap区域远远用不到这么大的内存, 使用64bit来存对象引用会造成浪费, 所以应该做点事情来节省资源. 如何做基于以下事实:CPU 使用的虚拟地址是64位的, 访问内存时, 必须使用64位的指针访问内
2016-08-17 15:19:17
7282
4
原创 [Java JVM] Hotspot GC研究- 开篇&对象内存布局
Hotspot简介Hotspot是openjdk的JVM虚拟机, linux发行版下默认安装的是openjdk, 而oracle 的jdk也基本是由openjdk代码编译而来, 外加上一些商业代码, 形成orcale的jdk. 由此可见, hotspot的无处不在. 现在越来越多的应用构建在java之上, 大数据的很多项目, 如Hbase, Hive, flume等等, 都可运行在hotspot之上
2016-08-12 12:00:56
3063
4
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人