还没写完。不好意思。。 会持续更新的。
运行时数据区域
1 什么是运行时数据区?
2 运行时数据区域是怎么划分的?
3 每个部分有什么作用?
1 什么是运行时数据区?
在JVM执行Java程序的时候,会将JVM所管理的内存切分成若干个区域。 这些被JVM管理的内存区域就是运行时数据区域(Runtime Data Area)。
2 运行时数据区域是怎么划分的?
主要分为两大部分:
1) 每个线程分配的内存空间,线程独有,其他线程不能访问,生命周期跟随线程的生命周期。
2) 各个线程共享的内存空间,各个线程可以共同访问,生命周期跟随虚拟机生命周期。
运行时数据区域的划分可以用下图表示:
clipboard.png
首先看线程共享的两个区域。
堆 Heap:
clipboard.png
- 堆是虚拟机管理的内存中最大的一块。
- 被所有线程共享,在虚拟机启动的时候创建。
- 唯一的目的就是存放对象实例,几乎所有的实例对象和数组都要在堆上分配,但不绝对。
- 垃圾收集器管理的主要区域。
- 可以处于物理上不连续的内存空间中。
- 堆可以设计成固定的,也可以设计成可扩展的,当前的Hotspot 虚拟机是可扩展的。
- 堆中没有内存完成实例分配,并且堆无法再扩展时,将会抛出OutOfMemeryError异常。
堆空间继续细分下去的话,就会有新生代和老年代,还有永久代。注意永久代并不属于堆内存中的一部分,同时jdk1.8之后永久代也将被移除,改用metaspace实现。
这样的划分只是为了垃圾回收的时候更加高效。













网友评论