运行时数据区域 1、程序计数器 程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。在虚拟机概念模型里(它仅是概念模型,各种虚拟机可能会通过一些高效的方式去实现),字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线 ...
分类:
编程语言 时间:
2020-06-21 00:07:24
阅读次数:
65
让我们先看一下内存模型 线程私有的: ?程序计数器?虚拟机栈?本地方法栈 线程共享的: ?堆?方法区?直接内存(非运行时数据区的一部分) 程序计数器 程序计数器是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。字节码解释器工作时通过改变这个计数器的值来选取下一条需要执行的字节码指令 ...
分类:
编程语言 时间:
2020-06-20 13:19:13
阅读次数:
62
程序计数器 是一块较小的内存空间,取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复都是依赖这个计数器完成 每条线程都有一个独立的程序计数器,各线程计数器互不影响,独立存储,这类内存区域称为"线程私有"内存 JAVA虚拟机栈 线程私有,生命周期与线程相同 基本数据类型,boolean ...
分类:
编程语言 时间:
2020-06-19 00:43:26
阅读次数:
61
本篇文章从底层原理层面深度剖析volatile关键字是如何实现内存可见性的,同时引入了Java内存模型、指令重排序以及内存屏障等知识点作为原理分析的知识支撑。 阅读本文之前,推荐大家先阅读作者之前的一篇关于happens-before的文章,这样更有助于大家对volatile关键字底层原理的理解。 ...
分类:
其他好文 时间:
2020-06-18 19:29:06
阅读次数:
49
摘要: 本文旨在介绍java多线程中的一些基础概念,同时也是自己的多线程学习总结。本文将围绕以下几点展开讲解:线程的定义、java内存模型、并发及同步、java的happens-before原则,最后介绍java中的synchronized以及volatile关键字。 线程及其定义 线程的基本定义 ...
分类:
编程语言 时间:
2020-06-18 19:27:36
阅读次数:
60
总所周知,Java中垃圾是由JVM自动回收,而不需要程序员自己动手,这样编码难度确实降低了,但是其回收的性能成为问题 1.什么是垃圾 没有任何引用指向的一个对象或者多个对象(循环引用)会被JVM认为是垃圾 2.如何定位垃圾 1.引用计数法(单个对象):引用的增加和减少都被记录,而引用为0的时候,就认 ...
分类:
编程语言 时间:
2020-06-14 20:32:54
阅读次数:
68
一.java内存模型 1.线程通信机制 1.共享内存 共享内存这种方式比较常见,我们经常会设置一个共享变量。然后多个线程去操作同一个共享变量。从而达到线程通讯的目的。例如,我们使用多个线程去执行页面抓取任务,我们可以使用一个共享变量count来记录任务完成的数量。每当一个线程完成抓取任务,会在原来的 ...
分类:
其他好文 时间:
2020-06-14 15:11:37
阅读次数:
56
简述 Java虚拟机规范中试图定义一种Java内存模型(Java Memory Model,JMM)来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果 定义模型的目标 Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到 ...
分类:
编程语言 时间:
2020-06-11 00:50:57
阅读次数:
70
1、概述 1.1、JVM规范 试图 定义一种java内存模型(JMM) 来 屏蔽掉各种硬件和OS的内存访问差异,以 实现 让java程序在各种平台下都达到一致的并发效果; 1.2、JDK1.5后,JMM 已经成熟和完善; 2、主内存 与 工作内存 2.1、JMM 的主要目标: 定义 程序中各个变量的 ...
分类:
编程语言 时间:
2020-06-10 13:23:51
阅读次数:
55
堆: 1.存放new的对象和数组 2.可以被所有的线程所共享,不会存放别的对象引用 栈: 1.存放基本变量类型(会包含这个基本类型的具体数值) 2.引用对象的变量(会存放这个引用在堆里面的具体地址) 方法区: 1.可以被所有线程共享 2.包含了所有的class和static变量 ...
分类:
编程语言 时间:
2020-06-09 23:49:51
阅读次数:
90