- 博客(11)
- 收藏
- 关注
原创 Java并发读书笔记(五)
第六章 Java并发容器和框架一、ConcurrentHashMap1.为什么使用:HashMap不安全,HashTable效率低 这边得上网查HashMap:并发执行put操作时会引起死循环,因为多线程会导致HashMap的Entry链表形成环形数据结构,Entry 的next节点永远不为空,就会产生死循环获取EntryHashTable:HashTable使用synchronized来保
2017-05-21 22:21:09 355
原创 Java并发读书笔记(四)
第四章 Java并发编程基础一、线程简介使用多线程的原因:1.更多的处理器核心:一个线程在一个时刻只能运行在一个处理器核心上2.更快的响应时间3.更好的编程模型线程优先级:操作系统基本采用时分的形式调度运行的线程,操作系统会分出一个个时间片,线程会分配到若干时间片, 当线程的时间片用完了就会发生线程调度,并等待着下次分配,线程分配到的时间片多少就决定了线程使用 处理器资源的多少。线程的状态
2017-05-19 16:58:10 372
原创 java并发读书笔记(三)
第四章 Java并发编程基础一、线程简介使用多线程的原因:1.更多的处理器核心:一个线程在一个时刻只能运行在一个处理器核心上2.更快的响应时间3.更好的编程模型线程优先级:操作系统基本采用时分的形式调度运行的线程,操作系统会分出一个个时间片,线程会分配到若干时间片, 当线程的时间片用完了就会发生线程调度,并等待着下次分配,线程分配到的时间片多少就决定了线程使用 处理器资源的多少。线程的状态
2017-05-04 21:44:27 388
原创 Java并发读书笔记(二)
第三章 Java内存模型一、基础1、并发的两个关键问题线程间通信和线程间同步线程通信机制:共享内存:隐式通信,显式同步消息传递:显式通信,隐式同步Java的并发采用的是共享内存模型。2、java内存结构JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存中,每个线程都有一个 私有的本地内存,本地内存中存储了该线程读/写共享变量的副本。 本地内存是JMM的一个抽象概念,并不真
2017-05-03 14:09:16 485
原创 java并发读书笔记(1)
第一章 并发编程的挑战一、上下文切换即使是单核处理器也支持多线程执行代码,CPU通过给每个线程分配CPU时间片(一般为几十毫秒)实现这个机制。当前任务执行一个时间片后会切换到下一个任务。在切换前会保存上一个任务的状态,以便下次 切换回这个任务时,可以再加载这个任务的状态。任务从保存到再加载的过程就是一次上下文切换。 如何减少上下文切换? 1. 无锁并发编程。多线程竞争锁时,会引起上下文切
2017-05-02 10:43:16 474
原创 JVM读书笔记(六):Java内存模型与线程
Java内存模型与线程一、概述二、硬件的效率与一致性处理器与内存的速度矛盾:引入高速缓冲(Cache):将运算需要使用的数据复制到缓存中,让运算能够快速进行, 当运算结束后再从缓存同步回内存之中。 这样的设计解决了速度矛盾,但也引入了新的问题:缓存一致性。每个处理器有自己的高速缓存,又共享 同一主内存。当多个处理器的运算任务都涉及同一块主内存区域时,将可能导致各自的缓存数据不一致。因此
2017-04-27 21:21:44 427
原创 JVM读书笔记(五):虚拟机字节码执行引擎
虚拟机字节码执行引擎一、概述所有的java虚拟机的执行引擎都是一致的:输入的是字节码文件,处理过程是字节码解析的等效过程,输出的是执行结果。二、运行时栈帧结构栈帧是用于支持虚拟机进行方法调用和方法执行的数据结构。存储了方法的局部变量表、操作数栈、动态链接和方法返回地址等信息。编译程序代码的时候,栈帧中需要多大的局部变量表,多深的操作数栈都已经完全确定,并且写入到方法表的Code属性之中因此一个栈帧需
2017-04-27 21:20:39 409
原创 JVM读书笔记(四):虚拟机类加载机制
虚拟机类加载机制一、概述类加载机制:虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成 可以被虚拟机直接使用的java类型。java语言中,类型的加载、连接、初始化过程都是在程序运行期间完成的。二、类加载的时机类的生命周期: 加载、验证、准备、解析、初始化、使用、卸载其中:验证、准备、解析3个部分统称为连接解析阶段的顺序不是一定的,某些情况下它可以在初始
2017-04-27 21:19:48 424
原创 JVM读书笔记(三):类文件结构
类文件结构一、概述二、无关性的基石(一次编写,到处运行):字节码java虚拟机不和任何语言绑定,它只与“Class文件”这种特定的二进制文件格式所关联,Class文件包含了 Java虚拟机指令集和符号表以及若干其他辅助信息。三、Class类文件的结构任何一个Class文件都对应着唯一一个类或接口的定义信息,但反过来,类或接口并不一定都定义在文件里, (比如可以通过类加载器直接生成)Class文件
2017-04-27 21:18:56 313
原创 JVM读书笔记(二):垃圾收集器与内存分配策略
垃圾收集器与内存分配策略-XX:+PrintGCDetails一、概述垃圾收集器关注的内存:方法区、java堆(因为这部分内存的分配和回收都是动态的)二、对象已死吗(判断对象是否存活)计数算法:给对象中添加一个引用计数器,每当有一个地方引用它时,加一,引用失效时,减一主流的java虚拟机不采用这种方法,原因:难以解决对象之间的循环引用问题可达性分析算法通过一系列成为“GC ROOTS”的对象作为起始
2017-04-27 21:17:53 357
原创 JVM读书笔记(一):Java内存区域与内存溢出异常
一、运行时数据区域线程共享:方法区、堆 线程隔离:虚拟机栈、本地方法栈、程序计数器1、程序计数器:当前线程所执行的字节码行号指示器(Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式实现的,在任何一个确定的时刻,一个处理器核都只会执行一个线程中的指令)若线程执行的是Java方法,计数器记录正在执行的虚拟机字节码指令的地址 若执行的是native方法,计数器值为空程序计数器是唯一一
2017-04-27 21:15:59 373
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人