
JVM
ONROAD0612
不问前程何如,但愿落幕无悔
展开
-
Java运行时数据区域
Java虚拟机针对Java程序运行的时候,将内存分成不同的区域,这些区域对于不同的数据的存储分工明确,Java虚拟机将运行时区域分成以下六个区域。一、程序计数器定义:程序计数器是记录当前线程执行的虚拟机字节码的行号指示器。特点:程序计数器是每个线程所特有的,并且程序计数器是Java虚拟机分区中唯一一块没有OutOfMemoryError的区域。二、Java虚拟机栈定义:用于存放...原创 2017-09-06 22:59:28 · 270 阅读 · 0 评论 -
Java内存模型
1 定义Java内存模型(Java Memory Model,JMM)是Java虚拟机规范中定义的为了屏蔽掉各种硬件和操作系统间的内存访问差异,以实现Java程序在各平台下访问内存的一致性个定义的一种内存模型。Java内存模型的主要目的是定义内存中各个变量的访问规则,也就是在虚拟机中将变量存入内存和从内存中访问变量的底层细节。需要注意的一点是:这里的变量指的是实例字段、静态变量和数组内...原创 2017-09-30 13:39:03 · 248 阅读 · 0 评论 -
JVM垃圾收集
1 概述由前面的文章我们可以知道Java运行时数据区被分成程序计数器、虚拟机栈、本地方法栈、堆、方法区等区域。在这些区域中程序计数器、虚拟机栈和本地方法栈是线程独有的,随着方法的进入和退出而释放空间,所以这部分区域是不需要进行垃圾回收的。而堆和方法区是线程共有的,所以需要垃圾回收。2 判断对象是否存活在通常情况下,如果我们被问到如何判断一个对象是否存活这个问题的时候,我们通常会想到引用...原创 2017-12-02 09:33:52 · 218 阅读 · 0 评论 -
Java内存模型--happens-before
1概述通过文章Java高并发--volatile使用及实现原理我们了解到happens-before原则禁止了指令重排,那么什么是happens-before原则呢?2定义happen-before原则保证了程序的“有序性”,它规定如果两个操作的执行顺序无法从happens-before原则中推到出来,那么他们就不能保证有序性,可以随意进行重排序。换句话说在JMM中,如果一个操作的执行...原创 2018-07-30 20:19:58 · 297 阅读 · 0 评论 -
Java内存模型--重排序
1概述通过前面Java内存模型--heppens-before我们了解到在执行程序的时候,为了提高程序的性能处理器和编译器会对指令进行重排序,那么什么是重排序?以及重排序需要满足的条件是什么呢?2定义重排序是编译器和处理器为了提高程序的性能对程序的指令进行重排的操作,概括地说重排序需要满足两个条件:(1)在单线程的情况下,不改变程序执行的结果。(2)存在数据依赖关系的不能进行重...原创 2018-07-31 10:20:51 · 306 阅读 · 0 评论 -
volatile与内存屏障
1、概述通过Java高并发--volatile的使用和原理这篇文章,我们了解到volatile关键字其实就两个作用:(1)保证变量的可见性。(2)防止指令重排。而针对变量的可见性我们知道是读volatile变量的时候直接从内存中读,而写volatile变量的时候直接写入内存。那么重排序呢?2重排序2.1定义所谓重排序是指编译器和处理器为了提高程序的执行效率,在不违背happens-...原创 2018-08-13 09:30:44 · 5119 阅读 · 1 评论