博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一行 Java 代码怎么跑起来?
阅读量:4121 次
发布时间:2019-05-25

本文共 1272 字,大约阅读时间需要 4 分钟。

640?wx_fmt=jpeg

本文Chat | Java与底层操作系统的交互细节

作者 | 小强

编辑 | 林瑟

下层基础决定上层建筑,只有扎实的基础知识,熟练掌握底层原理,才能在技术道路上走的更远,更深。

Java 作为一门高级语言也一样,你了解什么是缓存伪共享么?你了解 RocketMQ 为提升文件读写速度做了哪些优化么?你知道为什么大家总建议线程池大小设置为 CPU 核心 * 2 ,这样合理么?

本场 Chat 全文将介绍以下内容:

  1. CPU 访问内存

  2. 虚拟存储

  3. 进程中断

  4. 系统调用

  5. Java 内存映射

  6. Java 对象内存布局

  7. Java 线程同步

  8. Unsafe 类方法分析

01

结合 CPU 理解一行 Java 代码是怎么执行的

根据冯·诺依曼思想,计算机采用二进制作为数制基础,必须包含:运算器、控制器、存储设备,以及输入输出设备,如下图所示。

640?wx_fmt=png

(该图来源于百度)

02

我们先来分析 CPU 的工作原理

现代 CPU 芯片中大都集成了:控制单元、运算单元、存储单元。控制单元是 CPU 的控制中心, CPU 需要通过它才知道下一步做什么,也就是执行什么指令,控制单元又包含:指令寄存器(IR ),指令译码器( ID )和操作控制器( OC )。

当程序被加载进内存后,指令就在内存中了,这个时候说的内存是独立于 CPU 外的主存设备,也就是 PC 机中的内存条。指令指针寄存器 IP 指向内存中下一条待执行指令的地址,控制单元根据 IP 寄存器的指向,将主存中的指令装载到指令寄存器。

这个指令寄存器也是一个存储设备,不过它集成在 CPU 内部,指令从主存到达 CPU 后只是一串 010101 的二进制串,还需要通过译码器解码,分析出 操作码是什么、操作数在哪。之后就是具体的运算单元进行算术运算(加减乘除)、逻辑运算(比较、位移)。

而 CPU 指令执行过程大致为:取址(去主存获取指令放到寄存器)、译码(从主存获取操作数放入高速缓存 L1 )、执行(运算)。

640?wx_fmt=jpeg

这里解释下上图中 CPU 内部集成的存储单元 SRAM ,正好和主存中的 DRAM 对应,RAM 是随机访问内存,就是给一个地址就能访问到数据;而磁盘这种存储媒介必须顺序访问。

一行代码能够执行,必须要有可以执行的上下文环境。

包括指令寄存器、数据寄存器、栈空间等内存资源,然后这行代码必须作为一个执行流能够被操作系统的任务调度器识别,并给他分配 CPU 资源。当然这行代码所代表的指令必须是 CPU 可以解码识别的,所以一行 Java 代码必须被解释成对应的 CPU 指令才能执行。

由于原文很长,大量代码无法全部在本文中展示,感兴趣的同学扫下方二维码可以查看完整全文和代码部分。

扫码查看全文

640?wx_fmt=jpeg

最后,告诉大家一个赚取返现的小窍门

扫描上方图片的二维码之后如下操作

640640

640?wx_fmt=png

640

640?wx_fmt=png

640

640?wx_fmt=png

分享卡说明:每邀请一位好友购买,您将获得 Chat 定价的 25% 作为邀请奖励。大家可以生成自己专属的邀请卡,保存下来推荐给有需要的盆友~学习的同时还能赚到返现哦!!

点击阅读原文,订阅本场 Chat 学习,一起赚返现!

转载地址:http://luspi.baihongyu.com/

你可能感兴趣的文章
如何运行从网上下载的iWatch项目详细步骤.
查看>>
X-code7 beta error: warning: Is a directory
查看>>
Error: An App ID with identifier "*****" is not avaliable. Please enter a different string.
查看>>
X-code beta 开发iWatch项目,运行没有错误,但是某些操作一点就崩,而且找不错误的原因场景一
查看>>
Xcode 报错: Extra argument in call
查看>>
iTunes Connect 上传APP报错: Communication error. please use diagnostic mode to check connectivity.
查看>>
#import <Cocoa/Cocoa.h> 报错 Lexical or Preprocessor Issue 'Cocoa/Cocoa.h' file not found
查看>>
`MQTTClient (~> 0.2.6)` required by `Podfile`
查看>>
X-Code 报错 ld: library not found for -lAFNetworking
查看>>
Bitcode
查看>>
If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
查看>>
3.5 YOLO9000: Better,Faster,Stronger(YOLO9000:更好,更快,更强)
查看>>
iOS菜鸟学习--如何避免两个按钮同时响应
查看>>
How to access the keys in dictionary in object-c
查看>>
iOS菜鸟学习—— NSSortDescriptor的使用
查看>>
用异或来交换两个变量是错误的
查看>>
Tomcat7,jdk1.7基于redis的session共享
查看>>
hdu 1022 hdoj 1022
查看>>
hdu 1058 hdoj 1058
查看>>
hdu 1061 hdoj 1061
查看>>