jvm内存模型演变
2021-03-07 00:02:18 0 举报
jvm内存模型演变
作者其他创作
大纲/内容
堆
运行时常量池
方法区
本地方法栈
字符串常量池
永久代
jdk.16的堆
元空间
jdk.17的堆
JVM1.8的内存模型
jdk.18
程序计数器
常量池
本地内存
堆:是jvm内存管理的最大的一块区域,此内存区域的唯一目的就是存放对象的实例,所有对象实例与数组都要在堆上分配内存。它也是垃圾收集器的主要管理区域1、堆是JVM中所有线程共享的,因此在其上进行对象内存的分配均需要进行加锁,这也导致了new对象的开销是比较大的2、JVM为了提升对象内存分配的效率,对于所创建的线程都会分配一块独立的空间TLAB(Thread Local Allocation Buffer)3、TLAB仅作用于新生代的Eden Space,因此在编写Java程序时,通常多个小的对象比大的对象分配起来更加高效。4、新的Object总是创建在Eden Space
元数据取(方法区)
虚拟机栈
jdk定义:
jvm数据区
蓝色代表线程共享
jdk7的内存模型
方法区:是被线程共享的区域。在方法区中,存储了每个类的信息(包括类的名称、方法信息、字段信息)、静态变量、常量以及编译器编译后的代码等。方法区是堆的一个逻辑部分,为了区分Java堆,它还有一个别名Non-Heap(非堆)。相对而言,GC对于这个区域的收集是很少出现的。当方法区无法满足内存分配需求时,将抛出OutOfMemoryError异常。
0 条评论
回复 删除
下一页