主页

CPU缓存

[TOC] CPU缓存 现在都是多核CPU,而每个核心都会有几级缓存:老的CPU会有2级缓存(L1,L2),新的CPU会有3级缓存(L1,L2,L3),如下图所示: 从上图来看,可以得出以下结论: L1缓存可以分成两种:指令缓存、数据缓存;L2、L3缓存不区分数据缓存和指令缓存; L1,L2缓存在每个CPU核心中,L3缓存是所有CPU核心共享的内存; 从L1到L3缓存,离CPU越来越远,速度也越来越慢,存储容量也越来越大; 缓存后面是内存,内存后面是硬盘,存储容量越来越大但是存取速度越来越慢; 我们可以从定量的角度来看下计算机中各个存储元件的速度以及容量级别到底是怎么样的: L1缓存的存取速度:4个CPU时钟周期,容量在KB级别; L2缓存的...

阅读更多

浅析AbstractExecutorService

[TOC] 一、简介 AbstractExecutorService类提供了实现ExecutorService接口的默认实现方法; 该类通过使用RunnableFuture(newTaskFor()方法返回)实现了submit()、invokeAny()和invokeAll()方法;具体来说就是:submit(Runnable)方法会创建一个相关联的RunnableFuture对象,该对象会被执行并且返回,而子类只需要重写newTaskFor()方法来返回RunnableFuture实现即可; 比如实现代码可以是如下: public class CustomThreadPoolExecutor extends ThreadPoolExecutor { static c...

阅读更多

Linux Namespace 基本概念

Linux Namespace基本概念 Linux Namespace是Kernel的一个功能,用来隔离系统资源(进程树、网络接口、挂载点等);还可以实现UID级别的隔离(也就是说以UID为n的用户虚拟化一个Namespace,在该Namespace中用户具有root权限,而在实际物理机器上还是以UID为n的用户);再就是虚拟PID(从用户角度,每个命名空间像一台单独的Linux计算机有自己的init进程,其他进程依次递增;从父命名空间来看,子命名空间的进程映射到父命名空间的进程上,父命名空间可以知道每个子命名空间的运行状态,而子命名空间之间是隔离的)。 Namespace的API主要使用3个系统调用:clone()、unshare()、setns()以及一些/proc文件组成。以...

阅读更多

Java中的深拷贝和浅拷贝

Java中的深拷贝和浅拷贝 [TOC] 一、什么是深拷贝、浅拷贝 浅拷贝:将被复制的对象的成员变量拷贝到新创建的对象的成员变量中,即 对于基本类型来说,会直接进行值传递,也就是将该属性值复制一份给新的对象,也就是说新老对象的数据是不共享的,只是值相同而已; 对于引用类型来说,拷贝时也是把老对象的引用对象的地址拷贝到新对象中,实际上新老两个对象引用的是用一个对象; 深拷贝:不仅对基本类型变量进行值赋值,而且对于引用类型会为新对象创建相应的新的引用类型,即新老对象引用的是不同的对象; 示意图: 二、如何实现浅拷贝 String类型属于引用数据类型,不属于基本数据类型,但是String类型的数据是存放在常量...

阅读更多