0%

虚拟机把描述类的数据从 Class 文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的 Java 类型,这就是虚拟机的类加载机制。相较于在编译时需要进行连接工作的语言,Java 语言类型的加载、连接和初始化过程都是在程序运行期间完成的,这种策略虽然会令类加载时稍微增加一些性能开销,但是会为 Java 应用程序提供高度的灵活性,Java 里天生可以动态扩展的语言特性就是依赖运行期动态加载和动态连接这个特点实现的。

Read more »

代码编译的结果从夲地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步。将编写的程序编译成二进制本地机器码( Native Code )已不再是唯一的选择,越来越多的程序语言选择了与操作系统和机器指令集无关的、平台中立的格式作为程序编译后的存储格式。

Read more »

布隆过滤器(Bloom Filter)由布隆于 1970 年提出,它实际上由一个很长的二进制向量和一系列随机映射函数组成。布隆过滤器可以用于查询一个元素是否在一个集合中,它的优点是空间和时间效率都远超一般的算法,缺点是会有一定的误判和删除困难。

Read more »

基于 JVM 提供的原语,JUC 封装了 Atomic 原子类的方法类型,方便对部分基本类型、部分数组类型、引用类型以及对象属性修改类型的原子修改。

Read more »

本文介绍了三种并发工具:CountDownLatch、CyclicBarrier、Semaphore。它们都直接或者间接使用了 AQS 同步器,使用了 JVM 给它提供的原语操作。

Read more »

锁是为了保护竞争资源,防止多个线程同时操作共享资源而发生数据不一致的问题。本文介绍了三种 JUC 包提供的锁:ReentrantLock、ReentrantReadWriteLock、StampedLock。基于 AQS 实现的有 ReentrantLock、ReentrantReadWriteLock,而 StampedLock 实现了自己的队列。

Read more »

AbstractQueuedSynchronized(AQS),抽象的队列式的同步器,AQS 定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的 ReentrantLock、Semaphore、CountDownLatch…

Read more »

JMM 中关于 synchronized 有如下规定,线程加锁时,必须清空工作内存中共享变量的值,从而使得被监视器保护的临界区代码必须从主内存中读取共享变量;线程在解锁时,需要把工作内存中最新的共享变量的值写入到主存,以此来保证共享变量的可见性。

Read more »

并发是所有问题的基础,也是操作系统设计的基础。并发包括很多设计问题,其中有进程间通信、资源共享与竞争(如内存、文件、IO 访问)、多个进程活动的同步以及给进程分配处理器时间等。

Read more »

讲述了一些与进程管理相关的高级概念,这些概念在很多现代操作系统中都可以找到。首先这里所说的进程概念要比前面给出的更复杂、更精细。实际上,它包含了两个独立的概念:一个与资源所有权有关,一个与执行相关。这一区别使得许多操作系统中出现和发展了称为线程的结构。

Read more »