`

日常知识点记录

 
阅读更多
如果我们需要把硬盘中的数据读入到内存中,CPU首先需要把数据从硬盘中读入到寄存器中,然后再写入到内存中。

如果我们需要把内存中的数据写入到硬盘中的时候,CPU首先需要先把数据从内存中读入道寄存器中,然后再写入到硬盘中。

这就有了一个问题。CPU在放下手头工作之前,必须先把手边的一摊子工作找个地方暂存起来,以便一会儿回来接着干。那么,手头这摊子工作存在哪儿呢?当然是存在内存里。

我们可以看到,运行栈这种“先进后出,后进先出”的特点,恰好就是“栈”这个数据结构的特点,因而得名“运行栈”。

操作系统进程有可能在硬盘上开辟一块空间,作为虚拟内存的备用空间,当内存卡的物理内存容量不够时,就把内存中一些暂时不用的内容暂存道硬盘上,然后把需要的内容导入腾出的内存空间。这种技术叫做虚拟内存置换。

我们常听到,32位操作系统或64位操作系统之类的说法。这里的32位或者64位的说法,指的就是CPU的工作台(寄存器)的位数。

64位操作系统的内存单元32位操作系统大了一倍,那么,原子操作能够容纳的数据尺寸也大了一倍。这意味着,在取用某些“长”数据类型的时候,CPU按照64位操作系统的规则,只需要取一次,就可以把数据取到寄存器中。而CPU按照32位操作系统的规则,却分两次把数据取到寄存器中。因此,从处理长数据类型的速度上来说,64位操作系统是优于32位操作系统的。

我们前面提到的32位操作系统和64位操作系统,其中的“位”的意思就是一个二进制数字。32位就表示一个位数为32的二进制数字,表达的最大数量是2的32次方。64位就表示一个位数为64的二进制数字,表达的最大数量是2的64次方。“位”这个词,对应的英文单词是“bit”。这个词经常被音译为“比特”。比如,数字信号的传输速率就经常被译成“比特率”。

现在,我们这里澄清一下“Bit”(位)和“Byte”(字节)之间的区别。
Bit就是一位二进制数字,要么是0,要么是1,只能表达两个状态。
Byte(字节)则是一个位数为8的二进制数字,能够表达的状态数量达到2的8次方,即256个状态。Byte和Bit之间足足差了2的7次方的倍数,即128倍。

分配在运行栈(stack)上的数据,其生命周期由过程调用来决定。分配在内存堆(heap)的数据,其生命周期超出了过程调用的范围。内存堆中的数据,需要程序员写代码显式释放,或者由系统自动回收。

两者之间的区别在于,进程拥有一份独立的进程空间,而线程没有。线程只能依附于进程存在。一个进程下面的多个线程,只能共享同一份进程空间。因此,线程和进程的主要区别,就在于共享资源方面。除此之外,两者的运行、调度,几乎都是一样的。

volatile关键字可以加在任何类型的变量前面,可以加在Object Reference类型(即对象)的前面,也可以加在简单类型(比如char、int、float、long、double等)的前面。当变量是Object Reference类型(对象)的时候,在前面加volatile是没有意义的。因为对象的赋值只是一种Object Reference(内存地址)的赋值,并不引起对象内部结构数据的任何变化。而且,Object Reference的赋值,通常都是不需要同步的原子操作。

一般来讲,volatile关键字只对long、double等长类型才有意义。因为,短类型的操作基本上都是原子操作。而原子操作是一次操作就完成的,不需要分多次操作,因此也不需要进行同步处理。

我们只需要学习和思考“同步锁加在代码段上”的线程同步模型。

synchronized(同步锁) {
// 访问共享资源、需要同步的代码段
}
其中“同步锁”是什么呢?就是一个Object Reference。任何一个Java对象,或者说,任何一个Object Reference,都可以对应一个同步锁。换句话说,任何一个Java对象实例,都可以被synchronized关键字包裹起来,承担起同步锁的任务。

你不一定要把同步锁声明为static或者public,但是你一定要保证相关的同步代码之间,一定要使用同一个同步锁。

锁的粒度越小越好,不要直接放在方法前面偷懒!
分享到:
评论

相关推荐

    日常知识点记录_linux内核.7z

    日常知识点记录_linux内核.7z

    css入门基本知识点,记录我的日常学习

    适合于网站开发小白玩家,简单通俗易懂,通过了解css入门语法逐步加强对于前端的理解

    数据库系统基本知识点整理.docx

    ( l )数据( Data ) :描述事物的符号记录称为数据。数据的种类有数字、文字、图形、图像、声音、正文等。数据与其语义是不可分的。解析在现代计算机系统中数据的概念是广义的。早期的计算机系统主要用于科学计算,...

    个人知识管理系统

    个人知识在线管理是基于互联网的个人知识管理平台,通过此平台用户可以添加个人知识新知识点,修改知识点,查询知识点,查看知识点,删除知识点,搜索知识点,和修改个人信息。方便对日常学习生活中积累的知识进行...

    Blog:用于记录日常积累的小知识点

    IndexiOSNIB和XIB的区别于关系数字签名@weakif和@strongif详解常用脚本VCSgit配置mergetool配置gitconfig文件操作系统操作系统基本概念虚拟内存视频分辨率和流量的关系计算机网络计算机网络相关概念解释Tool利器...

    6前端面试一面 6:开发环境相关知识点与高频考题解析.md

    # 一面 6:开发环境相关知识点与高频考题解析 工程师的开发环境决定其开发效率,常用的开发环境配置也是面试考查点之一。 ## 知识点梳理 - IDE - Git - Linux 基础命令 - 前端构建工具 - 调试方法 本小节会重点...

    JAVA-:JAVA刷题日常记录

    JAVA刷题复习 JAVA刷题日常记录 记录每日leetcode/牛客刷题+复习基础知识点面试重点。

    管理信息系统知识点总结.doc

    第一章 当今全球商企中的信息系统 一... 这个层次系统的主要目的是回答日常问题及追踪记录组织内所有交易状况。为回答该类 问题,信息必须正确、实时并易于取得。 (二)管理信息系统和决策支持系统 管理信息系统(MIS

    证券投资分析考点三色笔记

    日常复习注意明确知识点,特别注意多选题知识点的提示。“□”代表一个明显的知识点。 3、复习流程。第一阶段,①自主快速浏览全书一遍;②在培训师指导下划三色重点,讲解和记忆重要知识点;③记忆三色重点一遍;④...

    Android-ReadTheFuckingSourceCode::winking_face_with_tongue:记录日常的开发技巧,开发中遇到的技术重点,难点,各个知识点的总结,优质面试题等等。

    这里主要记录日常的开发技巧,开发中遇到的技术重点,难点,各个知识点的总结。同时也会分享一些优质面试题,职业规划,读书心得,个人感悟等等。 :face_savoring_food: :full_moon_face: :waxing_gibbous_moon: :...

    MFC_ACCOUNT_CAT.zip

    本题主要涉及到的知识点有:对话框的使用、控件(按钮,编辑框,静态文本,列表框,组合框,树控件)。控件使用及会员数据的存储是本程序主要难点所在。 程序需要提供对话框及CFormView进行日常消费的记录和统计...

    C#编写的礼金记录程序

    程序语言:C# 运行环境:.NET 3.5以上 程序类型:Winform 程序知识点:泛型集合的Linq查询与Xml文件序列化 程序用途:用以记录日常包礼金的情况,就是某家姑娘出嫁包了多少钱,某人生了孩子包了多少钱

    Windows程序设计MFC大作业-(记账猫)源代码+实验报告

    本题主要涉及到的知识点有:对话框的使用、控件(按钮,编辑框,静态文本,列表框,组合框,树控件)。控件使用及会员数据的存储是本程序主要难点所在。 程序需要提供对话框及CFormView进行日常消费的记录和统计功能...

    蓄水池算法leetcode-Leetcode_diary:Leetcode就是你所需要的

    日常刷的记录 知识点1:数组(array) Easy: Normal: Hard: 知识点2:动态规划(dynamic programming) 经典: Easy: Normal: Hard: 知识点3:字符串(character string) Easy: Normal: Hard: 知识点5:树(tree...

    服务器日常维护.doc

    在查看时在对应的日志记录上点 右键选"属性",在"筛选器"中设置一个日志筛选器,只选择错误、警告,查看日志的来 源和具体描述信息。对于出现的错误如能在服务器常见故障排除中找到解决办法则依照 该办法处理该问题...

    up_2021:记录个人日常总结

    这一年度主要会去记录关于前端进阶,严重会稍微有点大的知识点,以及面试重点内容的总结。 如果需要查看基础部分,请查阅笔者另一个项目: ://www.github.com/tiantingrui/up_2020 先简单写一下今年会去总结分享的...

    日常学习java第一篇

    这是本人第一篇java学习笔记,主要记录了学习过程中学习到的知识点以及自己的盲区,供大家参考,不喜欢勿喷,谢谢。

    blog:日常工作中使用的技术沉淀+学习记录

    此项目是利用业余时间,对一些技术知识点进行整理,用来记录个人学习笔记。这个项目和 项目的不同在于 是用来动手实践,对于一些技术的实际搭建和造轮子的项目,正所谓实践出真知。相关的源码都会在上边。两个项目...

    Java300集阶段性项目3-智能电话本项目

    通过该项目可以对以往所学过的知识点进行统一的复习,将平时所学的内容综合到一起并运用到实际的项目中。 该项目能够充分的体现出一些简单的业务流程处理,能够使掌握基本的业务流程处理。 进一步理解什么是面相对象...

    H3C的实验案例

    记录一些在日常用到H3C交换机配置用到的案例知识点。后面更新

Global site tag (gtag.js) - Google Analytics