查看“深入理解JVM:Java内存模型与线程”的源代码
←
深入理解JVM:Java内存模型与线程
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
[[category:JVM]] == 概述 == 衡量一个服务性能的高低好坏,每秒事务处理数(Transactions Per Second,'''TPS''')是重要的指标之一,它代表着'''一秒内服务端平均能响应的请求总数''',而TPS值与程序的并发能力又有非常密切的关系。 == 硬件的效率与一致性 == # 硬件的效率问题: #: 处理器至少要与内存交互,如读取运算数据、存储运算结果等,这个I/O操作就是很难消除的(无法仅靠寄存器来完成所有运算任务)。 # 解决: #: 高速缓存(Cache),用来作为内存与处理器之间的缓冲; # 导致新的问题: #: 缓存一致性(Cache Coherence):每个处理器都有自己的高速缓存,而它们又共享同一主内存(Main Memory),多个处理器任务涉及同一主内存区域时,可能导致各自的缓存数据不一致。 # 解决: #: 各个处理器访问缓存时都遵循一些协议:MSI、MESI(Illinois Protocol)、MOSI、Synapse、Firefly 及 Dragon Protocol等。 :[[File:处理器、高速缓存、主内存间的交互关系.jpg|600px]] * “内存模型”:可以理解为在特定的操作协议下,对特定的内存或高速缓存进行读写访问的过程抽象。 *: 不同架构的物理机器可以拥有不一样的内存模型,而Java虚拟机也有自己的内存模型; 硬件的内存模型: <pre> 除了增加高速缓存之外,为了使处理器内部的运算单元能尽量被充分利用,处理器可能会对输入代码进行乱序执行(Out-Of-Order Execution)优化,处理器会在计算之后将乱序执行的结果重组,保证该结果与顺序执行的结果是一致的,但并不保证程序中各个语句计算的先后顺序与输入代码中的顺序一致,因此如果存在一个计算任务依赖另外一个计算任务的中间结果,那么其顺序性并不能靠代码的先后顺序来保证。 </pre> 与处理器的乱序执行优化类似,Java虚拟机的即时编译器中也有'''指令重排序(Instruction Reorder)'''优化。 == Java内存模型 == === 主内存与工作内存 === === 内存间交互操作 === === 对于volatile型变量的特殊规则 === === 针对long和double型变量的特殊规则 === === 原子性、可见性与有序性 === === 先行发生原则 === == Java与线程 == === 线程的实现 === === Java线程调度 === === 状态转换 === == Java与协程 == 12.5.1 内核线程的局限 12.5.2 协程的复苏 12.5.3 Java的解决方案
返回至“
深入理解JVM:Java内存模型与线程
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
已展开
已折叠
查看
阅读
查看源代码
查看历史
更多
已展开
已折叠
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
笔记
服务器
数据库
后端
前端
工具
《To do list》
日常
阅读
电影
摄影
其他
Software
Windows
WIKIOE
所有分类
所有页面
侧边栏
站点日志
工具
链入页面
相关更改
特殊页面
页面信息