博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java内存模型(一)
阅读量:1826 次
发布时间:2019-04-25

本文共 1352 字,大约阅读时间需要 4 分钟。

在提到java的内存模型是,一般都会说堆栈、程序计数器、方法区等这些设计。这里我更觉得秦大哥的说明更加容易理解。那么接下来我会根据秦大哥的解释进行总结说明。

 

一、内存结构:

内存结构通常说的就是栈、堆这些结构。从逻辑结构上分为线程栈、堆内存、非堆内存。

  • 线程栈:为什么叫线程栈呢?因为首先这部分的数据结构是栈。每个线程都会有自己栈。JVM为每个新创建的线程都分配一个堆栈。线程栈包含了当前正在执行的方法链/调用链上的所有方法的状态信息。线程栈中保存了方法内的局部变量。线程栈有如下特点:
    • 每个线程都只能访问自己的线程栈
    • 每个线程都不能访问(看不见)其他线程的局部变量
    • 所有原生类型的局部变量都存储在线程栈中,因此对其他线程是不可见的
    • 线程可以将一个原生变量值的副本传给另一个线程,但不能共享原生局部变量本身
    • 堆内存中包含了Java代码中创建的所有对象,不管是哪个线程创建的。 其中也涵盖了包装类型(例如 Byte , Integer , Long 等)
    • 不管是创建一个对象并将其赋值给局部变量, 还是赋值给另一个对象的成员变量, 创建的对象都会被保存到堆内存中
    • 对象的成员变量与对象本身一起存储在堆上, 不管成员变量的类型是原生数值,还是对象引用 
    • 类的静态变量则和类定义一样都保存在堆中
    • 栈帧:栈帧是一个逻辑上的概念,具体的大小在一个方法编写完成后基本上就能确定。线程执行过程中,一般会有多个方法组成调用栈(Stack Trace), 比如A调用B,B调用C。。。每执行到一个方法,就会创建对应的 栈帧(Frame)。

       

 

  • 堆:堆内存又称为“ 共享堆 ”,堆中的所有对象,可以被所有线程访问, 只要他们能拿到对象的引用地址。堆结构的特点如下:
    • 如果一个线程可以访问某个对象时,也就可以访问该对象的成员变量
    • 如果两个线程同时调用某个对象的同一方法,则它们都可以访问到这个对象的成员变量,但每个线程的局部变量副本是独立的
    • 堆通常分为:年轻代(Young generation)和老年代(Old generation,也叫 Tenured)两部分。
    • 年轻代还划分为3个内存池,新生代(Eden space)和存活区(Survivor space), 在大部分GC算法中有2个存活区(S0, S1),在我们可以观察到的任何时刻,S0和S1总有一个是空的。
    • JVM对新生代还有优化,那就是TLAB(Thread Local Allocation Buffer), 给每个线程先划定一小片空间,你创建的对象先在这里分配,满了再换。这能极大降低并发资源锁定的开销。
  • 非堆:不归GC管理,里面划分为3个内存池:
    • Metaspace,以前叫持久代(永久代, Permanent generation), Java8换了个名字叫Metaspace
    • CCS,Compressed Class Space,存放class信息的,和Metaspace有交叉
    • Code Cache, 存放 JIT 编译器编译后的本地机器代码
  • 程序计数器:当前线程执行到哪一行字节码指令,这个信息则被存放在程序计数寄存器。每个线程拥有自己独立的程序计数器。此内存区域是唯一一个在java虚拟机规范中没有规定任何OutOfMemoryError情况的区域。

转载地址:http://movkf.baihongyu.com/

你可能感兴趣的文章
以鸢尾花数据集为例,用Python对决策树进行分类
查看>>
对抗样本是怎么产生的?如何避免对抗攻击?
查看>>
假如你的同事是个机器人……
查看>>
多加一个显示器,让你的错误减少33%
查看>>
意识能永存吗?先找到与AI的共存之道吧!
查看>>
那些程序员小白还没掌握的30件事
查看>>
5个特征选择算法,让你的数据处理得心应手
查看>>
用生成对抗网络,将普通图片转换为梵高大作
查看>>
揭秘电商评分系统的核心原理:如何让评分更可信?
查看>>
今日芯声 | 2019搞笑诺贝尔奖来了!奖金获10万亿奖金的是……
查看>>
换个姿势读罗密欧与朱丽叶,带你了解 OOP与TDD
查看>>
数据科学家要掌握的第一门编程语言是什么?
查看>>
“读芯术”精华文章汇总:专业知识
查看>>
“读芯术”精华文章汇总:学术报告
查看>>
用机器学习预测股票,3个事项助你避开雷区
查看>>
AI电影修复技术,带回《乱世佳人》高清版斯嘉丽
查看>>
中科院-百度联合造AI精品课程,0元你还不心动!
查看>>
AI既能带来世界末日,也能成为救世之主
查看>>
代码详解:Async/Await优于基础Promises的7大原因
查看>>
哪些编码语言具有广阔前景?
查看>>