语言中编程概念
语言中的编程概念: 面向对象 函数式编程 元编程 并发模型 虚拟机和垃圾回收 静态类型、动态类型、类型推导 抽象语法树 指针
语言中的编程概念: 面向对象 函数式编程 元编程 并发模型 虚拟机和垃圾回收 静态类型、动态类型、类型推导 抽象语法树 指针
Java并发多线程学习笔记 标签(): java 多线程 并发编程 艺术 原子操作的实现原理 #1、术语 比较并交换 compare and swap(一个新值和旧值,比较旧值有没有发生变化,如果没有发生变化则交换成新值) CPU流水线 CPU pipeline -- 内存顺序冲突 Memory order violation -- 一般由假共享内存引起,出现冲突时,cpu流水线必须清空 #2、处理器如何实现原子操作 32位IA-32处理器使用缓存加锁或总线加锁的方式来处理多处理器之间的原子操作 一般情况下处理器会自动保证基本内存操作的原子性,但是复杂的内存操作则并不能自动保证原子性。比如跨总线宽度,跨多个缓存行和跨页表的访问。 处理器提供总线锁定和缓存锁定两个机制来保证复杂内存操作的原子性。 ##1.总线锁 总线锁就是使用处理器提供的一个LOCK#信号,当一个处理器在总线上输出此信号时,其他处理器的请求将被阻塞,那该处理器可以独占共享内存。 ##2.缓存锁 频繁使用的内存会缓存在处理器的L1,L2,L3高速缓存里 缓存锁定是指内存区域如果被缓存在处理器的缓存行中,并且在lock操作期....
JVM 1. 类加载的过程 加载->连接(验证->准备->解析)->初始化->使用->卸载 加载 1、通过一个类的全限定名来获取其定义的二进制字节流。 2、将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。 3、在Java堆中生成一个代表这个类的java.lang.Class对象,作为对方法区中这些数据的访问入口。 注意 : 虚拟机规范之中并没有规定要从哪里加载二进制字节流.所以就有开发人员玩出了很多有创造力的花样.比如从jar包,war包中加载.网络中获取,applet就是例子.运行时动态计算生成,用的是动态代理技术.由其他文件生成.典型的就是jsp应用. 验证 验证的目的是为了确保Class文件中的字节流包含的信息符合当前虚拟机的要求,而且不会危害虚拟机自身的安全。不同的虚拟机对类验证的实现可能会有所不同,但大致都会完成以下四个阶段的验证:文件格式的验证、元数据的验证、字节码验证和符号引用验证。 准备 准备阶段是正式为类变量分配内存并设置类变量初始值的阶段,这些内存都将在方法区中分配。对于该阶段有以下几点需要注意: 1、这时候进行内....
Java并发多线程学习笔记 标签(): java 多线程 并发编程 艺术 原子操作的实现原理 #1、术语 比较并交换 compare and swap(一个新值和旧值,比较旧值有没有发生变化,如果没有发生变化则交换成新值) CPU流水线 CPU pipeline -- 内存顺序冲突 Memory order violation -- 一般由假共享内存引起,出现冲突时,cpu流水线必须清空 #2、处理器如何实现原子操作 32位IA-32处理器使用缓存加锁或总线加锁的方式来处理多处理器之间的原子操作 一般情况下处理器会自动保证基本内存操作的原子性,但是复杂的内存操作则并不能自动保证原子性。比如跨总线宽度,跨多个缓存行和跨页表的访问。 处理器提供总线锁定和缓存锁定两个机制来保证复杂内存操作的原子性。 ##1.总线锁 总线锁就是使用处理器提供的一个LOCK#信号,当一个处理器在总线上输出此信号时,其他处理器的请求将被阻塞,那该处理器可以独占共享内存。 ##2.缓存锁 频繁使用的内存会缓存在处理器的L1,L2,L3高速缓存里 缓存锁定是指内存区域如果被缓存在处理器的缓存行中,并且在lock操作期....