问题:请讲下java内存模型?

分析:该问题比较容易和jvm内存区域(java内存结构)这样的问题混淆,其实他们是两个概念,jvm内存区域指的是运行时的几块数据区域,包括堆、方法区、虚拟机栈、本地方法栈、程序计数器,强调的是在java程序运行的时候,内存是怎么划分的;而内存模型是另外的一个概念。

回答要点:

主要从以下几点去考虑,

1、java内存模型的作用,保证程序执行的可见性、有序性、原子性;

2、内存模型定义了什么,内存模型定义了多线程读写共享内存的规范;

3、内存模型怎么实现多线程共享变量的读写;

java内存模型简称JMM,是一种规范,通过这些规范定义java程序中各个变量的访问方式,解决并发编程中可能出现的线程安全问题。jvm运行程序的实体是线程,每个线程创建时jvm都会为其创建一个工作内存,用于存放线程私有的数据;Java内存模型规定所有的变量均保存在主内存中,主内存是共享内存,所有的线程都可以访问,但对变量的所有操作(包括读取赋值)都在工作内存中进行,线程无法直接操作主内存中的变量,所以就有了JMM。

主内存

主要存储的是Java实例对象,所有线程创建的实例对象都在主内存中,不管是成员变量还是在方法中创建的局部变量,同时也包含类信息、常量(static final)、静态变量(static)。由于主内存是共享区域,所以多个线程对同一个变量访问就会有线程安全问题;可以把主内存想象为java内存区域的堆、方法区

工作内存

主要存储当前线程正在执行的方法的所有本地变量(工作内存中存储着主内存中变量的副本),工作内存只对当前线程可见,其他线程无法访问当前线程的变量;可以把工作内存想象为Java内存区域的虚拟机栈、本地方法栈、程序计数器;是在java程序运行时的内存;

一个实例对象中的成员方法,如果方法中包含本地变量是基本数据类型(8种,boolean byte short int long double float char),这些基本类型的变量存储在工作内存中;如果本地变量是引用类型,那么该变量的引用存储在工作内存中,对象实例则存储在主内存中,对应对象实例中的成员变量不论是基本类型还是引用类型都存储在主内存中;

例,

public class Test{

private void method(){
A ma=new A();
int a=0; } } public class A{
private int a;
private Integer aa; }

上面的方法method中的ma会存储在工作内存中,a存储在工作内存,而new A()生成的实例存储在主内存中,包括实例中的a也是存储在主内存中;

在Java中可以依靠volatile和synchronized关键字来保证可见性、有序性、原子性,除此之外还定义了一套happens-before原则来保证多线程操作时的可见性、有序性、原子性;

程序顺序原则,在一个线程内必须保证语义串行性,也就是按照代码顺序执行;

锁原则,加锁操作必然发生在解锁操作之后(同一把锁);

volatile原则,volatile的写先发生于volatile的读;

。。。

先写下分析思路,后续补充详细内容,有不当之处欢迎指正!

java面试一日一题:java内存模型的更多相关文章

  1. java面试一日一题:java中的垃圾回收器

    问题:请讲下java中垃圾回收器有哪些? 分析:该问题主要考察hotspot虚拟机下实现的垃圾回收器 回答要点: 主要从以下几点去考虑, 1.垃圾回收器的种类 2.每种垃圾回收器的着重点是什么 前边的 ...

  2. java面试一日一题:讲下在什么情况下会发生类加载

    问题:请讲下在什么情况下会发生类加载? 分析:该问题主要考察对java中类加载的知识,什么是类加载,为什么会发生类加载,什么情况下发生类加载? 回答要点: 主要从以下几点去考虑 1.什么是类加载: 2 ...

  3. java面试一日一题:java中垃圾回收算法有哪些

    问题:请讲下在java中有哪些垃圾回收算法 分析:该问题主要考察对java中垃圾回收的算法以及使用场景 回答要点: 主要从以下几点去考虑, 1.GC回收算法有哪些 2.每种算法的使用场景 3.基于垃圾 ...

  4. java面试一日一题:mysql中常用的存储引擎有哪些?

    问题:请讲下mysql中常用的引擎有哪些? 分析:该问题主要考察对mysql存储引擎的理解,及区别是什么? 回答要点: 主要从以下几点去考虑, 1.mysql的存储引擎的基本概念? 2.mysql中常 ...

  5. java面试一日一题:讲下mysql中的undolog

    问题:请讲下mysql中undo log的作用 分析:mysql中有很多日志,例,bin log undo log redo log,要弄清楚这些日志的作用,就要了解这些日志出现的背景及要解决的问题: ...

  6. java面试一日一题:java线程池

    问题:请讲下java中的线程池 分析:在面试中经常问到线程池的问题,要掌握其基本概念,使用方法,注意事项等,引申下tomcat中默认的线程数是多少 回答要点: 主要从以下几点去考虑, 1.为什么要使用 ...

  7. java面试一日一题:如何判断一个对象是否为垃圾对象

    问题:请讲下在java中如何判断一个对象是否为垃圾 分析:该问题主要考察对java中的垃圾回收,用什么方式去识别一个对象是垃圾: 回答要点: 主要从以下几点去考虑, 1.GC回收的是什么,回收发生在内 ...

  8. java面试一日一题:java的类加载过程

    问题:请讲下java的类加载机制及过程 分析:该问题主要考察对JVM加载类的机制及过程,延申出的问题是为什么使用双亲委托模型,有什么办法可以打破双亲委托吗: 回答要点: 主要从以下几点去考虑, 1.类 ...

  9. java面试一日一题:java中一个对象实例的结构是什么样子的

    问题:请讲下在java程序运行时一个对象实例的数据结构是什么样子的 分析:该问题主要考察对java中对象的理解,在程序运行过程中一个对象实例是以什么样的形式存在的 回答要点: 主要从以下几点去考虑, ...

  10. java面试一日一题:讲对mysql的MVCC的理解

    问题:请讲下对mysql中MVCC的理解 分析:这个问题要回答的是对MVCC的理解,以及MVCC解决了什么问题这几个方面入手. 回答要点: 主要从以下几点去考虑, 1.什么是MVCC? 2.MVCC用 ...

随机推荐

  1. jQuery——链式操作

    链式操作,即连续操作. 例如: <!DOCTYPE html> <html> <head> <script src="https://cdn.boo ...

  2. Http 代理工具 实战 支持网页与QQ代理

    前言: 有些公司不让员工上Q或封掉某些网站,这时候,干着急没办法,只能鄱墙.如果上网搜代理IP,很少能用,用HTTP-Tunnel Client代理软件,免费的也是经常性的掉线.正好手头上有N台服务器 ...

  3. 7z 命令行压缩解压详解-中文版

    1) 简介 7z,全称7-Zip, 是一款开源软件.是目前公认的压缩比例最大的压缩解压软件. 主页:http://www.7-zip.org/ 中文主页:http://7z.sparanoid.com ...

  4. 代码审计——基础(JAVASE)

    JAVASE 目录 JAVASE 基本语法 关键字 变量 作业1 作业完成 第一题:简单的介绍了java语言历史,优势.发展 第二题:特性:面向对象.跨平台.封装.继承.多态.抽象.扩展性.健壮性.垃 ...

  5. OPA Gatekeeper:Kubernetes的策略和管理

    目录 一.系统环境 二.前言 三.OPA Gatekeeper简介 四.在kubernetes上安装OPA Gatekeeper 五.gatekeeper规则 5.1 使用gatekeeper禁止某些 ...

  6. 混入 - Mixins

    混入(mixins)是一种分发Vue组件中可复用功能的非常灵活的方式.混入对象可以包含任意组件选项.当组件使用混入对象时,所有混入对象的选项将被混入该组件本身的选项. 混入分为:全局和局部 定义全局混 ...

  7. Python 调整PDF页面尺寸大小

    在处理PDF文件时,我们可能会遇到这样的情况:原始PDF文档不符合我们的阅读习惯,或者需要适配不同显示设备等.这时,我们就需要及时调整PDF文档中的页面尺寸,以满足不同应用场景的需求. 利用Pytho ...

  8. restTemplate.getForEntity restTemplate.getForObject GET请求

    //带参数 @Test public void testGet1(){ String url = "http://IP:PORT/query?token={token}&memNo= ...

  9. mysql 联合表查询从表即使有索引依然ALL的一个原因-索引ALL解决,字符编码方式不一致导致全表搜索

    mysql 联合表查询从表即使有索引依然ALL的一个原因-索引ALL解决,字符编码方式不一致导致全表搜索那就是主表和从表的关联字段的编码方式不一样!!! 产生的现象: 解决之后,正确的使用了t2.or ...

  10. 关于Elasticsearch查找相关的问题汇总(match、match_phrase、query_string和term)

    关于Elasticsearch查找相关的问题汇总(match.match_phrase.query_string和term) 查询全部: { "query": { "ma ...