Java内存模型
Java内存模型的基础
并发编程模型的两个关键问题
- 线程之间如何通信?
- 线程之间如何同步?
通信是指线程之间以何种机制交换信息,在命令式编程中线程之间的通信机制有两种:共享内存和消息传递。在共享内存模型中,线程之间共享程序的公共状态,通过读写内存中的公共状态进行隐式通信;而在消息传递的并发模型中,线程之间没有公共状态,线程之间必须通过发送消息来显式进行通信。
通信是指线程之间以何种机制交换信息,在命令式编程中线程之间的通信机制有两种:共享内存和消息传递。在共享内存模型中,线程之间共享程序的公共状态,通过读写内存中的公共状态进行隐式通信;而在消息传递的并发模型中,线程之间没有公共状态,线程之间必须通过发送消息来显式进行通信。
在多线程并发编程中synchronized和volatile关键字都扮演着重要角色,volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”。可见性的意思是当一个线程修改一个共享变量时,另外的线程可以读到修改后的值。volatile的恰当使用能比synchronized关键字的使用和执行成本更低,因为它不会引起线程上下文的切换和调度。
Apache Kafka是一个分布式流平台,具有以下三个关键能力:
streams of records),类似于一个消息队列或者是企业消息系统;即时处理记录流
算法分为标记阶段和清除阶段 ,首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象,它的标记过程就是引用计数法或者可达性算法判断对象是否存活的过程。
不足:
/gc1.png)
Java虚拟机在执行Java程序的过程中,把其所管理的内存划分成多个区域,如下图所示。每个数据区域都有各自的用途,有的区域随着虚拟机进程的启动而存在,是线程公有的;有些区域依赖于特定的线程而存在,是线程私有的。
关键的思想在于关注图像中包含更丰富信息的那些部分并放大它们。