content
Linux Linux用户和组管理 Linux系统权限控制基础 Linux系统shell脚本基础 Linux磁盘空间分析和删除日志文件 Linux排查进程和线程 Linux系统中自动检测并重启Java项目 Linux系统-grep指令
brew安装软件备份 # 备份 $ brew install htop $ brew tap Homebrew/bundle $ brew bundle dump $ mv Brewfile ~/cloud # 还原 $ brew bundle
在 JDK 1.2 版之前,Java 里面的引用是很传统的定义:如果 reference 类型的数据中存储的数值 代表的是另外一块内存的起始地址,就称该 reference 数据是代表某块内存、某个对象的引用。这种 定义并没有什么不对,只是现在看来有些过于狭隘了,一个对象在这种定义下只有“被引用”或 者“未被引 用”两种状态,对于描述一些“食之无味,弃之可惜”的对象就显得无能为力。譬如我们希望能描述一类对 象:当内存空间还足够时,能保留在内存之中,如果内存空间在进行垃圾收集后仍然非常紧张,那就可以 抛弃这些对象 —— 很多系统的缓存功能都符合这样的应用场景。
经过半个世纪的发展,今天的内存动态分配与内存回收技术已经相当成熟,一切看起来都进入了“自动化” 时代,但当需要排查各种内存溢出、内存泄漏问题时,当垃圾收集成为系统达到更高并发量的瓶颈时, 就必须对这些“自动化”的技术实施必要的监控和调节。
Java 虚拟机在执行 Java 程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域有 各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而一直存在,有些区域则是依赖用户 线程的启动和结束而建立和销毁。根据《Java 虚拟机规范》的规定,Java 虚拟机所管理的内存将会包括 以下几个运行时数据区域,如图所示:
许多硬件部件都有这样一个特点 —— 硬件设计者引人一个部件是为了解决某些问题,然而这些部件自身又会 引人新的问题。为了解决这些新的问题,硬件设计者又引入了其他部件。因此,掌握这些部件之间的这种关系 有助于我们更好地理解相关部件。Java内存模型是对Java多线程程序的正确性进行推理的理论基础,了解 Java内存模型有助于编写正确的多线程程序以及进行代码复审。
本文从面向对象设计的角度出发介绍几种保障线程安全的常用技术。这些技术的使用通常可以使得在不必 借助锁的情况下保障线程安全,从而既避免锁可能导致的问题以及开销,又有利于提高系统的并发性并 简化代码。另外,本文还介绍了常用的线程安全的集合对象。
线程停止:看似简单,实则不然。
线程间协作还有一种常见的形式是,一个线程请求另外一个线程停止其正在执行的操作。比如,对于有些 比较耗时的任务,我们往往会采用专门的工作者线程来负责其执行,如果中途要取消(比如用户不想等了) 这类任务的执行,那么我们就需要借助Java 线程中断机制。
C Primer Plus, 6th Edition 中文版 读书笔记
C++ Primer, 5th Edition
private blog
读书笔记
A Man-In-The-Middle Proxy as Fiddle and Charles, using Netty, JavaFX