理解volatile其实还是有点儿难度的,它与Java的内存模型有关,所以在理解volatile之前需要先了解有关Java内存模型的概念,目前只做初步的介绍。 一、操作系统语义 计算机在运行程序时,每条指令都是在CPU中执行的,在执行过程中势必会涉及到数据的读写。 我们知道程序运行的数据是存储在主存 ...
分类:
其他好文 时间:
2019-10-02 22:55:20
阅读次数:
86
1、运行时数据区域 2、JVM配置选项 -Xms20m 设置Java堆内存的最大值为20m; -Xmx30m 设置Java堆内存的最小值为30m; -Xms和-Xmx设置相同值,可以避免堆自动扩展; -XX:+HeapDumpOnOutOfMemoryError 可以让虚拟机再出现内存溢出异常时Du ...
分类:
编程语言 时间:
2019-09-30 12:51:25
阅读次数:
86
JVM的参数类型 标准参数 help server client version showversion cp classpath X参数 Xint: 解释执行 Xcomp:第一次使用就编译成本地代码 Xmixed:混合模式,JVM自己来决定是否编译成本地代码 XX参数 特点 非标准化参数 相对不稳 ...
分类:
其他好文 时间:
2019-09-29 10:00:24
阅读次数:
107
1. Java 内存区域与内存溢出异常1.1 运行时数据区域根据《Java 虚拟机规范(Java SE 7 版)》规定,Java 虚拟机所管理的内存如下图所示。 1.1.1 程序计数器 内存空间小,线程私有。字节码解释器工作是就是通过改变这个计数器的值来选取下一条需要执行指令的字节码指令,分支、循环 ...
分类:
编程语言 时间:
2019-09-27 12:21:59
阅读次数:
60
0,堆的简介 数据结构中的堆是一种特殊的二叉树,不同于 Java 内存模型中的堆。 堆必须符合以下两个条件: 从第一点可以知道,堆适合用数组来存储。 第二点中,若父节点都大于等于左右子节点,则被称为大顶堆,反之则为小顶堆。 图-最大堆 1,堆的特性 2,堆的实现 3,堆的应用 3.1堆排序 利用堆这 ...
分类:
其他好文 时间:
2019-09-24 21:03:51
阅读次数:
96
先上个图 这是根据《Java虚拟机规范(第二版)》所画的jvm内存模型。 + 程序计数器:程序计数器是用来记录当前线程方法执行顺序的,对应的就是我们编程中一行行代码的执行顺序,如分支,跳转,循环,异常处理等。所以在多线程下,程序计数器必然是线程隔离的,每个线程都有自己独立的程序计数器。注意,Java ...
分类:
其他好文 时间:
2019-09-23 22:14:47
阅读次数:
117
一、原子性 原子性操作指相应的操作是单一不可分割的操作。例如,对int变量count执行count++d操作就不是原子性操作。因为count++实际上可以分解为3个操作:(1)读取变量count的当前值;(2)拿count的当前值和1做加法运算;(3)将加完后的值赋给count变量。 在多线程环境中 ...
分类:
编程语言 时间:
2019-09-23 12:08:35
阅读次数:
78
前言 相信很多JAVA中高级的同学在面试的时候会经常碰到一个面试题 你是如何在工作中对JVM调优和排查定位问题的 ? 事实上,如果用户量不大的情况下,在你的代码还算正常的情况下,在工作中除非真正碰到与JVM相关的问题是少之又少,就算碰到了也是由公司的一些大牛去排查解决,那么我们又如何积累这方面的经验 ...
分类:
编程语言 时间:
2019-09-22 22:02:47
阅读次数:
106
1.数据结构:数组、链表、栈、队列、数 2.jmm内存模型:jmm java memory model java内存模型volatile具备两种特性,第一就是保证共享变量对所有线程的可见性。将一个共享变量声明为volatile后,会有以下效应: 1.当写一个volatile变量时,JMM会把该线程对 ...
分类:
其他好文 时间:
2019-09-18 01:10:06
阅读次数:
98
java的内存划分为5个部分 1,栈(stack):存放的都是方法中的局部变量 2,堆(heap):凡是new出来的对象,都在堆当中,每一个对象都有一个16进制是地址值,堆内存里面的数据,都有一个默认值, 3,方法区(method area):存储class相关信息,包含方法的相关信息 4,本地方法 ...
分类:
编程语言 时间:
2019-09-14 22:43:35
阅读次数:
112