最近工作中又用到了volatile关键字,一直以来就是单纯的使用,也没有仔细看过相关内容,这次借机会详细的整理了下有关volatile的资料,记录在案以备查阅。 首先我们来看一个小例子: 这段代码是volatile关键字的典型应用场景之一,两个线程(主线程与thread 线程)通过共享一个变量进行信 ...
分类:
编程语言 时间:
2019-06-23 19:10:51
阅读次数:
93
Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点。而且很多概念的名称看起来又那么相似,很多人会傻傻分不清楚。比如本文要讨论的 JVM内存结构 、 Java内存模型 和 Java对象模型 ,这就是三个截然不同的概念,但是很多人容易弄混。 首先,这三个概念是完全不同的三个概念。 ...
分类:
编程语言 时间:
2019-06-22 11:02:44
阅读次数:
121
jvm主要由三个子系统构成:类加载子系统,运行时数据区(内存模型),执行引擎 运行时数据区主要包括: 1.本地方法栈:登记native方法,执行时加载本地方法库 2.程序计数器:就是一个指针,用来存储指向下一条执行指令的地址,也就是即将要执行的指令代码,是一个非常小得空间,可以忽略不计。 3.jav ...
分类:
编程语言 时间:
2019-06-17 01:13:43
阅读次数:
126
搞Java开发的,经常会碰到下面两种异常: 1、java.lang.OutOfMemoryError: PermGen space 2、java.lang.OutOfMemoryError: Java heap space 要详细解释这两种异常,需要简单重提下Java内存模型。 (友情提示:本博文章 ...
分类:
其他好文 时间:
2019-06-13 20:45:30
阅读次数:
157
背景 我们知道导致cpu缓存导致了可见性问题,编译器优化带来了有序性问题。那么如果我们禁用了cpu缓存与编译器优化,就能够解决问题,但是性能就无法提升了。所以一个合理的方案,就是按照一定规范来禁用缓存和编译器优化,即在某些情况下禁用缓存与编译器优化。Java内存模型就是这样的一个规范,用来解决可见性 ...
分类:
编程语言 时间:
2019-06-09 00:27:24
阅读次数:
142
五个线程同时往 HashMap 中 put 数据会发生什么? ConcurrentHashMap 是怎么保证线程安全的? 在分析 HashMap 源码时还遗留这两个问题,这次我们站在 Java 多线程内存模型和 synchronized 的实现原理,这两个角度来彻底分析一下。至于 JDK 1.8 的 ...
分类:
编程语言 时间:
2019-06-07 10:42:43
阅读次数:
124
一、深入java虚拟机—JVM视频课程 深入JVM(Java Virtual Machine) java内存模型 java内存模型概览 在运行时数据区之中内存的分配一共有五个模块: 1、堆内存Heap:保存真正的程序的数据的部分。 2、栈Stack:保存堆内存的地址、基本数据、方法的执行; 3、方法 ...
分类:
其他好文 时间:
2019-06-07 00:28:12
阅读次数:
104
对于Java内存模型总结起来就是:1. 为什么定义Java内存模型?现代计算机体系大部是采用的对称多处理器的体系架构。每个处理器均有独立的寄存器组和缓存,多个处理器可同时执行同一进程中的不同线程,这里称为处理器的乱序执行。在Java中,不同的线程可能访问同一个共享或共享变量。如果任由编译器或处理器对 ...
分类:
编程语言 时间:
2019-06-05 09:45:58
阅读次数:
115
Java 内存模型(Java Memory Model,JMM)看上去和 Java 内存结构(JVM 运行时内存结构)差不多,但这两者并不是一回事。JMM 并不像 JVM 内存结构一样是真实存在的,它只是一个抽象的概念。 Java 的线程间通过共享内存(Java堆和方法区)进行通信,在通信过程中会存 ...
分类:
编程语言 时间:
2019-05-29 10:39:43
阅读次数:
155
一、javaSE基础 1、java IO流 2、java NIO 3、java集合 4、java注解 5、java泛型 6、java反射 7、java多线程 8、常用String、数组、日期操作 二、java虚拟机 1、java内存模型 2、java类加载机制 3、垃圾回收机制 三、框架类 1、Sp ...
分类:
编程语言 时间:
2019-05-22 22:13:54
阅读次数:
172