
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
Java编程开发语言是目前大多数软件开发程序员都在学习和使用的一种编程开发语言,而本文我们就通过案例分析来简单了解一下,Java编程内存管理基础知识分享。
一、打牢基础
原子性是一种按原子方式的操作,那你有可能问了“原子方式”是啥?就是不可中断的意思。你也可以理解不能再分。要么不执行,要么用原子的方式来执行,在这个过程中是不会被其他线程中断。
可见性是线程对共享变量修改的可见状态。假如一个线程修改了一个共享变量的值,其他线程立马知道共享变量改了。比较好的例子就是volatile变量了。这里叙述下大致的原理:
你的volatile变量对所有的线程都是可见的,指的是你执行完assign之后立即就会把共享变量复制到主内存上去;在其他任意一个线程读取主内存对象时候,读取都是存到自己的线程私有内存里面,它是都会刷新主内存。这仅仅是针对同一个线程,在主内存上是表现数据一致性的。但是那如果是其他线程的私有内存它们一起来存取到各其他线程的私有内存,那你私有内存和你的主内存的数据那可就不一定相同啊。这就是volatile它是不能保证啥?不能保证线程安全的。
怎么样让它线程安全呢?
条件1:运算结果并不依赖变量的当前值,或者你能保证只有一个线程修改变量的值,就是上面我说的一种情况。
条件2:变量不需要和其它的状态变量共同参与不变约束。
有序性意思说如果在本线程内观察,所有的操作都是有序的,说明线程间的操作具有有序性。那肯定有无序的,我们可以用java为我们提供好的volatile和synchronized两个关键字来保证线程之间操作有序就完成。
先来回顾下指令重排序
因为在JVM内部,我们为了提高性能,编译器和处理器会对指令做重排序,但是JMM确保在不同的编译器和不同的处理器平台之上,通过插入特定类型的MemoryBarrier,
有序性是指:按照代码的既定顺序执行。
说的通俗一点,就是代码会按照指定的顺序执行,例如,按照程序编写的顺序执行,先执行一行代码,再执行二行代码,然后是三行代码,以此类推。
指令重排序编译器或者解释器为了优化程序的执行性能,有时会改变程序的执行顺序。但是,编译器或者解释器对程序的执行顺序进行修改,可能会导致意想不到的问题!
在单线程下,指令重排序可以保证终执行的结果与程序顺序执行的结果一致,但是在多线程下就会存在问题。
数据依赖性
如果两个操作访问同一个变量,且这两个操作中有一个为写操作,
好了我们要先整明白它有啥用?
它规定了一个线程如何并且能够及时看到其他线程修改过后的变量的值,及如何到内存去同步咱们的共享变量。
happens-before先行发生原则
它用于描述两个操作在内存中的可见性,这样可以判断数据是否存在竞争,线程是否安全的主要根据。
inta=10;
b=b+1;
CPU有时候会为了计算单元的利用率将其进行指令重排,如果b=b+a就不会进行指令重排,因为b的结果依赖于a的值。
二、JVM对内存模型的实现
在JVM内部,内存模型大致分为两大块:线程栈区和堆。
JVM中运行的每个线程都有自己的线程栈,线程栈包含了当前线程执行的方法调用相关信息,我们也可以叫它调用栈。
本地内存A和B有主内存中共享变量x的副本。假设初始时,这三个内存中的x值都为0。线程A在执行时,把更新后的x值(我们先假设值为1)临时存放在自己的本地内存A中。假如它们两个需要通信了,线程A先把自己本地内存的x值变成了1。随后,线程B到主内存中读取线程A更新后的x值,此时线程B的本地内存的x值也变成了1。
它是咋来的呢?
JVM规范由它来定义这玩意,你想吗,内存模型,内存模型,就是告诉你在JVM中你的内存是如何分布的。根据它特有的结构,就它的结构自然而然的表示出来它的功能。
Heap
优点:运行时数据区,动态分配内存大小,有gc;缺点:因为要在运行时动态分配内存,所以它的存取速度比栈要慢一些,对象是放在堆上,静态类型和那个类的定义也是一起存储在堆上的。
stack
优点:存取速度比Heap快,但是肯定比寄存器要慢一丢丢。缺点:由于是JVM提前划分好的,那它的数据大小和生命周期那就是确定的了,说明缺乏灵活性,你想你下有哪些用到的类型它的大小是固定的呢!莫错,基本数据类型,那就多得很。(譬如char,boolean,double,int等,提示一下对象句柄也属于基本类型变量的哦)。
当一个线程去访问一个对象时,可以去访问对象的成员变量,如果有两个线程访问对象的成员变量,则每个线程都有对象的成员变量的私有拷贝。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei456学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。