1. 需要了解的知识

1. 并发编程需要处理两个关键问题 线程同步和通信

2. 线程通信机制有两种 共享内存(隐式)和消息传递(显示)

3. Java中是采用共享内存模型来进行通信

2. 了解Java虚拟机模型(红色字体区域为线程共享,其余为线程私有)

(直接内存不是在运行时数据区内)

1. 程序计数器

一块较小的内存,可看成当前线程执行字节码的行号指示器分支、循环、跳转、异常处 理、线程恢复等基础功能都需要依赖这个计数器完成。每条线程都需要一个独立的程序计数器,各线程之间的计数器互不影响,独立存储。程序计数器是唯一一个没有规定任何 OutOfMemoryError 的区域。

2. Java虚拟机栈

虚拟机栈描述的是 Java 方法执行的内存模型:每个方法被执行的时候都会创建一个栈帧(Stack Frame),存储 局部变量表 操作栈 动态链接 方法出口,每一个方法被调用到执行完成的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。

这个区域有两种异常情况:StackOverflowError:线程请求的栈深度大于虚拟机所允许的深度OutOfMemoryError:虚拟机栈扩展到无法申请足够的内存时

3. 本地方法栈

基本与虚拟基栈一致,运行的是本地方法。

4. Java堆

Java 堆(Java Heap)是 Java 虚拟机中内存最大的一块。Java 堆在虚拟机启动时创建,被所有线程共享。

作用:存放对象实例。垃圾收集器主要管理的就是 Java 堆。Java 堆在物理上可以不连续,只要逻辑上连续即可。

5. 方法区

用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。和 Java 堆一样,不需要连续的内存,可以选择固定的大小,更可以选择不实现垃圾收集。

运行时常量池

是方法区的一部分。保存 Class 文件中的符号引用、翻译出来的直接引用。运行时常量池可以在运行期间将新的常量放入池中。

6. 类加载器

类加载器和这个类本身一同确立其在Java虚拟机中的唯一性

分类可以分为 启动类加载器 扩展类加载器 应用程序类加载器

类加载器的机制

双亲委派机制

加载器都应当有自己的父类加载器。类加载器之间的父子关系,通过组合关系复用。工作过程:如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器完成。每个层次的类加载器都是如此,因此所有的加载请求最终都应该传送到顶层的启动类加载器中,只有到父加载器反馈自己无法完成这个加载请求(它的搜索范围没有找到所需的类)时,子加载器才会尝试自己去加载。

3. java线程之间的通信由jmm控制

Java虚拟机jvm和Java内存模型jmm浅尝相关推荐

  1. Java虚拟机(JVM)与Java内存模型(JMM)学习笔记

    Java虚拟机[JVM]与Java内存模型[JMM]学习笔记 Java虚拟机(JVM) 三种JVM JVM 位置 JVM的主要组成部分及其作用 类加载器 双亲委派机制 沙箱安全机制 Java本地接口( ...

  2. java虚拟机jvm与Java内存模型(JMM)

    Java内存模型(JMM) Java 内存模型规定了所有的变量都存储在主内存中,每条线程还有自己的工作内存.Java 内存模型(JMM) 抽象了线程和主内存之间的关系,就比如说线程之间的共享变量必须存 ...

  3. [转载] java虚拟机 jvm 出入java栈 栈空间内存分配

    参考链接: Java虚拟机(JVM)堆栈区域 java栈空间是一块线程私有的内存空间,java堆和程序数据密切相关,那么java栈就是和线程执行密切相关.线程最基本的执行行为就是函数的调用.每次函数调 ...

  4. 深入java虚拟机-JVM (java virture mechine)

    编程语言的层级关系 文章目录 编程语言的层级关系 JVM内部结构 类加载器 执行引擎 Java栈 .本地方法栈J PC寄存器 方法区(元空间) Java堆 直接内存 电脑硬件–>windows系 ...

  5. Java内存结构(JVM)与内存模型(JMM)

    JVM内存结构 我们都知道,Java代码是要运行在虚拟机上的,而虚拟机在执行Java程序的过程中会把所管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途.其中有些区域随着虚拟机进程的启动而存 ...

  6. Java内存模型(JMM)详解!

    文章目录 什么是JMM? 现代计算机内存模型 缓存一致性 JMM内存模型与计算机内存模型的关系 线程间通信 JMM三大问题 原子性 可见性 有序性 volaile关键字详解! 什么是JMM? JMM定 ...

  7. java虚拟机MyEclipse_Eclipse和MyEclipse运行环境java虚拟机jvm设置,自己设置jre

    Eclipse运行环境java虚拟机jvm设置,自己设置jre 浅谈Eclipse寻找JVM(JRE)的顺序机制 Eclipse也是一个普通的Java程序,因此必须有一个JRE做为运行环境. 如果你的 ...

  8. JVM——Java内存模型(JMM)

    关注微信公众号:CodingTechWork,一起学习进步. 软硬件发展概述 Amdahl定律和摩尔定律 1)Amdahl定律:通过系统中并行化和串行化的比重来描述多处理器系统能获得的运算加速能力. ...

  9. 【深入Java虚拟机JVM 03】Java内存模型

    说明:文章所有内容均摘自<深入理解Java虚拟机:JVM高级特性与最佳实践(第二版)> Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的"高墙",墙外面的 ...

最新文章

  1. 视+AR获近亿元A+轮融资,汽车之家领投
  2. 打马赛克就安全了吗?AI消除马赛克,GitHub开源项目上线三天收获近7000星
  3. java mail smtps,使用javamail发SMTPS邮件,javamailsmtps邮件,Java通常情况下都不会
  4. 机器学习(MACHINE LEARNING)MATLAB动态规划解决背包问题
  5. knockout的使用
  6. Scikit-Learn 机器学习笔记 -- 线性回归、逻辑回归、softmax回归
  7. 华为抢购助手_华为MateBook 13轻薄本:出差者的首选,学生党的福音
  8. 一站式计费解决方案——腾讯计费首次亮相昆明
  9. 信息学奥赛一本通 1961:【13NOIP普及组】计数问题 | 洛谷 P1980 [NOIP2013 普及组] 计数问题
  10. nacos 本地测试_Nacos入门
  11. centos7 安装MyCli MySQL 客户端
  12. 安卓三维展示源码_谷歌也翻车了?全球数亿安卓设备难逃一“劫”,用户隐私数据库被利用长达10年!...
  13. 前端Js框架汇总【转】
  14. 带你了解HTTP协议(一)
  15. C语言编写程序11到20的和,C语言编程 菜鸟练习100题(11-20)
  16. 手机输入法带拼音声调_分享4种给拼音加声调的方法,让你的word更有灵魂
  17. ARM 汇编语言教程
  18. 企业SOA平台 JBoss SOA
  19. python List去重
  20. 面试考点:逻辑思维面试题(软件测试)

热门文章

  1. 基于 Traefik 的 Basic Auth 配置
  2. 【JZOJ4117】lhxsb(三角函数+凸壳+CDQ分治)
  3. zTree(二)树状图下拉框
  4. pdf转换成txt转换器在线转换
  5. 三百个好用的免费软件名单[转]
  6. 计算机课用英语怎么说cute,it/cute是什么意思
  7. Python return函数返回值详解
  8. 实际开发问题解决记录: 需求是mysql执行查询 返回数据给前端 既要返回值不为NULL的列也要返回值为NULL的列(值为NULL的列列名返回给前端)
  9. echarts数据可视化图表(二):双柱状图
  10. mysql 5.6 不同步_MySQL5.6配置同步复制的新方法以及常见问题的解决方法