Java运行时数据区域

作者: Franck_ | 来源:发表于2018-05-25 14:42 被阅读58次

还没写完。不好意思。。 会持续更新的。

运行时数据区域

1 什么是运行时数据区?

2 运行时数据区域是怎么划分的?

3 每个部分有什么作用?

1 什么是运行时数据区?

在JVM执行Java程序的时候,会将JVM所管理的内存切分成若干个区域。 这些被JVM管理的内存区域就是运行时数据区域(Runtime Data Area)。

2 运行时数据区域是怎么划分的?

主要分为两大部分:

1) 每个线程分配的内存空间,线程独有,其他线程不能访问,生命周期跟随线程的生命周期。

2) 各个线程共享的内存空间,各个线程可以共同访问,生命周期跟随虚拟机生命周期。

运行时数据区域的划分可以用下图表示:


clipboard.png

首先看线程共享的两个区域。

堆 Heap:

clipboard.png
  • 堆是虚拟机管理的内存中最大的一块。
  • 被所有线程共享,在虚拟机启动的时候创建。
  • 唯一的目的就是存放对象实例,几乎所有的实例对象和数组都要在堆上分配,但不绝对。
  • 垃圾收集器管理的主要区域。
  • 可以处于物理上不连续的内存空间中。
  • 堆可以设计成固定的,也可以设计成可扩展的,当前的Hotspot 虚拟机是可扩展的。
  • 堆中没有内存完成实例分配,并且堆无法再扩展时,将会抛出OutOfMemeryError异常。

堆空间继续细分下去的话,就会有新生代和老年代,还有永久代。注意永久代并不属于堆内存中的一部分,同时jdk1.8之后永久代也将被移除,改用metaspace实现。

这样的划分只是为了垃圾回收的时候更加高效。

方法区:

相关文章

网友评论

本文标题:Java运行时数据区域

本文链接:https://www.haomeiwen.com/subject/qntujftx.html