JVM--java内存模型
Posted wangdan1030
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVM--java内存模型相关的知识,希望对你有一定的参考价值。
大家可能看到这篇的内容,java的内存模型认为与JVM没有关系,其实不是,所有的程序运行都是在内存中运行的,我们这里所得java内存模型其实就是方法运行过程中在JVM内存空间内是怎么分配的。
1.首先需要强调的一点就是每个线程都有一个工作内存,这个工作内存和主存是相互独立的。此外工作内存中存放着主存变量的值的拷贝。运行情况如下:
2.内存有他自己的特性:
(1)可见性:一个新城修改了变量,其他线程可以立即知道。
(2)有序性:一个线程中,所有的指令和操作都是有序的。线程之外操作是无序的,可能存在指令重排。但是指令重排破坏了线程间的有序性。
3.指令重排的基本原则:
(1)程序顺序原则:一个线程内必须保证语义的串行性
(2)volatile:volatile变量的写必须先发生于读
(3)锁规则:unlock必须发生在lock之前
(4)传递性,如果A先于B,B先于C,那么A的运行一定在C前面
(5)线程的start方法先于它的任何一个动作
(6)线程的所有操作都先于Thread.join()
(7)线程的中断(interrupt())先于被中断线程的代码
(8)对象的构造区函数执行结束先于finalize方法
4. addcode字节码运行的两种方式
(1)解释执行:解释一句执行一句
(2)编译执行:强制字节码编译成机器码,直接执行机器码,运行时编译,并且编译后性能有数量级的提升。
以上是关于JVM--java内存模型的主要内容,如果未能解决你的问题,请参考以下文章
「JAVA」Java基础之堆栈方法区类加载器——JVM内存模型分析
JVM(Java虚拟机)详解(JVM 内存模型堆GC直接内存性能调优)