Java内存区域-简介

我们从学习Java的第一天开始,老师就告诉我们说,Java语言相比较C或者C++,它有一个非常强大的地方,就是它的内存的管理,我们使用Java不需要自己来申请内存、释放内存等等,这一切的工作都由Java虚拟机来帮助我们完成,发现我们在写代码的过程中也就不需要再管理我们的内存了,但是,随着我们学习的深入,我们始终会出现一些莫名的问题,比如说内存的溢出,等等,那么,我们就开始注意到Java虚拟机了,这个时候我们就去了解Java虚拟机的内存管理。

我们先来看一下官方给我们的运行时数据区域的划分

主要分为两大块,线程共享区线程独占区

每一个线程就是一个顺序的执行单元,其实线程独占区就是每一个线程它都有自己的这么一块区域,就是每一个线程都有它自己的程序计数器本地方法栈虚拟机栈。所谓的线程共享区就是多个线程共享这同一块区域。

如果说这是我们的程序

程序里面有多个线程共同执行

对于线程独占区的内存区域来讲,在每一个线程中,它都会分配这么一块内存区域,每一个线程里面是独立的,比如说程序计数器,每个线程里面都会有自己的程序计数器

扫描二维码关注公众号,回复: 4131937 查看本文章

那么,对于线程共享区就不一样了,方法区和堆是处于所有线程所共享的区域,就这一块区域,所有的线程共享

我们来具体的看一下这每个区域的简单介绍

线程共享区中:

  1. 方法区:存储运行时常量池、已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
  2. Java堆:存储对象实例。

线程独占区中:

  1. 虚拟机栈:存放方法运行时所需的数据,称为栈帧。其实,虚拟机栈描述的就是方法的内存模型。
  2. 本地方法栈:为JVM所调用的Native即本地方法服务。

程序计数器:记录当前线程所执行到的字节码的行号。这个行号其实是一个标识。程序计数器这个内存区域是一个非常简单的内存区域,而且它占用的内存空间也是比较小的。

猜你喜欢

转载自blog.csdn.net/G_66_hero/article/details/84197594