关于jmm:JMM学习笔记二-规则和volatile
学生: 老师,我想请问为什么在月球上物体也会有坠落呢,和在地球上一样诶? 老师: 因为他们都遵循雷同的法则, 咱们依据法则就能够预测行为。但你察看到没有在月球上的坠落速度会慢一点。 到底什么是内存模型?这里咱们来回顾一下《JMM 学习笔记(一) 跨平台的JMM》讲述的货色,在这篇文章外面有两条线, 第一条是硬件性能晋升带来的问题,在单核时代,晋升CPU的方向是优化架构性能和晋升主频速度,然而遗憾的是主频并不能无限度的晋升,主频进步过一个拐点之后,功耗会爆炸晋升。但咱们还须要更强、更快的CPU,多核是一剂良药,引入了多核当前,如何晋升CPU运算性能的问题失去了解决,咱们就能够通过多核来一直的晋升CPU的性能了,某种程度上来说,咱们也能够了解为提供给软件的计算资源在一直的减少,那摆在开发者背后的一个问题是如何更好的应用这些计算资源,如何晋升计算资源的使用率。咱们将联合操作系统的倒退历史来答复这个问题。让咱们从纸带计算机开始讲起,如下图所示 一边读一边执行想来是那时的内存比拟小,然而随着技术的倒退,内存在缓缓的变大,高级语言开始呈现,咱们来察看一下一台计算机同时只能执行一个程序会遇到哪些问题, 咱们先来看下上面一个很简略C语言小程序: #include <stdio.h>#include <stdlib.h>#include <time.h>// argv 用于接管以命令行形式启动传递的参数int main(int argc , char* argv[]){ int to ,sum = 0; // 字符串转int to = atoi(argv[1]); // 打印传入的内部参数 printf("sum: %d\n",to); // 获取output.txt的指针 FILE* fp = fopen("output.txt", "w"); // 获取以后工夫 clock_t start_time = clock(); for(int i = 0 ; i <= to ; i++){ sum = sum + i; // sum = sum + 1; 语句一 // fprintf 将sum写入到fp指向的文件 fprintf(fp,"%d",sum); // 语句二 } fclose(fp); clock_t end_time = clock(); // 获取以后零碎工夫 double total_time = (double)(end_time - start_time) / CLOCKS_PER_SEC; // 计算总运行工夫(秒 printf("Total runtime: %.12f seconds\n", total_time);}而后咱们以命令行形式启动这个程序: ...