码迷,mamicode.com
首页 > 编程语言 > 详细

java运行时内存模型

时间:2019-02-26 17:13:31      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:使用   永久   运行   tsp   分配   动态   在线   物理   计数器   

运行时内存分为:

1、方法区

2、堆

3、虚拟机栈

4、本地方法栈

5、程序计数器

 

方法区、堆是共享的,所有线程都可以读取

虚拟机栈、本地方法栈、程序计数器是线程私有的,每个线程单独一套,它们在线程创建时生成,在线程死亡时销毁

堆分为年轻代,老年代,永久代。分区的目的是为了更快的分配内存和更好的执行垃圾回收。主要作用是存户对象实例,绝大部分实例和数据都存储在堆中,gc就作用于堆

hotspot虚拟机的方法区存储在永久区,方法区的实现jvm规范没有强制规定,hotspot虚拟机这么实现完全是为了懒省事,方法区放到永久代后gc也可以管理方法区,不用单独实现垃圾回收。

1.8之后hotspot虚拟机移除了整个永久区,改用直接使用物理内存的元空间替代永久代。

程序计数器是唯一不会出现oom的区域,虚拟机实现程序的跳转,循环等操作是基于程序计数器的,程序计数器就是指令的行号,虚拟机通过计数器知道下一个应该执行的指令是哪个。

当线程创建的时候会在栈内存中为线程的每个方法创建一个栈帧,该栈帧中保存着每个方法的局部变量表,方法的出口,动态链接,操作数栈等信息。当前栈帧指的是当前正在执行的线程的方法。

本地方法栈存储的是被执行的本地方法(也就是native方法)的栈帧,存储的内容和线程方法的栈帧存储的内容类似。

java运行时内存模型

标签:使用   永久   运行   tsp   分配   动态   在线   物理   计数器   

原文地址:https://www.cnblogs.com/zouyitangzaishuo/p/10438202.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!