Loading

上一页 1 ··· 9 10 11 12 13 14 15 16 17 ··· 35 下一页
摘要: 如果我们把字节码看作是程序语言的一种中间表示形式(Intermediate Representation,IR)的话,那编译器无论在何时、在何种状态下把 Class 文件转换成与本地基础设施(硬件指令集、操作系统)相关的二进制机器码,它都可以视为整个编译过程的后端。 本章中所提及的即时编译器都是特指 阅读全文
posted @ 2021-05-21 15:27 tree6x7 阅读(74) 评论(0) 推荐(0) 编辑
摘要: 1. 线程安全说明 1.1 定义 笔者认为《Java 并发编程实战(Java Concurrency In Practice)》的作者 Brian Goetz 为“线程安全”做出了一个比较恰当的定义: “当多个线程同时访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额 阅读全文
posted @ 2021-05-21 12:10 tree6x7 阅读(93) 评论(0) 推荐(0) 编辑
摘要: 1. 同步器 1.1 CountDownLatch 当一个或多个线程调用 await() 时,这些线程会阻塞; 其它线程调用 countDown() 会将计数器减 1(调用该方法的线程不会阻塞); 当计数器的值变为 0 时(减少计数),因 await() 阻塞的线程会被唤醒,继续执行。 public 阅读全文
posted @ 2021-05-21 12:04 tree6x7 阅读(46) 评论(0) 推荐(0) 编辑
摘要: 1. 引入 1.1 进程和线程 【进程】进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。 【线程】通常在一个进程中可以包含若干个线程,当然一个进程中至少有一个线程,不然没有存在的意义。线程 阅读全文
posted @ 2021-05-21 12:00 tree6x7 阅读(55) 评论(0) 推荐(0) 编辑
摘要: 我们知道,线程是比进程更轻量级的调度执行单位,线程的引入,可以把一个进程的资源分配和执行调度分开,各个线程既可以共享进程资源(内存地址、文件 I/O 等),又可以独立调度。目前线程是 Java 里面进行处理器资源调度的最基本单位。 1. 线程的实现 主流的操作系统都提供了线程实现,Java 语言则提 阅读全文
posted @ 2021-05-20 17:22 tree6x7 阅读(37) 评论(0) 推荐(0) 编辑
摘要: Java 内存模型是围绕着在并发过程中如何处理原子性、可见性和有序性这三个特征来建立的。简单来说,JMM 定义了一套在多线程读写共享数据时(成员变量、数组)时,对数据的可见性、有序性、原子性的规则和保障。 1. 并发编程中的三个问题 1.1 可见性 可见性(Visibility):是指一个线程对共享 阅读全文
posted @ 2021-05-20 14:56 tree6x7 阅读(67) 评论(0) 推荐(0) 编辑
摘要: 1. 概述 执行引擎是 Java 虚拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系 阅读全文
posted @ 2021-05-19 20:37 tree6x7 阅读(96) 评论(0) 推荐(0) 编辑
摘要: 1. 概述 Java 虚拟机把描述类的数据从 Class 文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的 Java 类型,这个过程被称作虚拟机的「类加载机制」。 与那些在编译时需要进行连接的语言不同,在 Java 语言里面,类型的加载、连接和初始化过程都是在程序运 阅读全文
posted @ 2021-05-19 19:58 tree6x7 阅读(72) 评论(0) 推荐(0) 编辑
摘要: 1. 概述 在 Java 技术下谈“编译期”而没有具体上下文语境的话,其实是一句很含糊的表述: 因为它可能是指一个前端编译器(叫“编译器的前端”更准确一些)把 *.java 文件转变成 *.class 文件的过程; 也可能是指 Java 虚拟机的即时编译器(常称 JIT 编译器,Just In Ti 阅读全文
posted @ 2021-05-19 19:13 tree6x7 阅读(56) 评论(0) 推荐(0) 编辑
摘要: 1. 概述 Java 虚拟机的指令由 1 个字节长度的、代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的 0~N 个代表此操作所需的参数(称为操作数,Operand)构成。 由于 Java 虚拟机采用“面向操作数栈”而不是“面向寄存器”的架构,所以大多数指令都不包含操作数,只有 阅读全文
posted @ 2021-05-19 16:46 tree6x7 阅读(299) 评论(0) 推荐(0) 编辑
上一页 1 ··· 9 10 11 12 13 14 15 16 17 ··· 35 下一页