代码改变世界

堆、栈、方法区、直接内存

2018-08-14 11:30  摘花  阅读(494)  评论(0编辑  收藏  举报

堆(heap):FIFO,所有线程共享的一块内存,是专门存放对象实例的地方,GC发生在这里。随JVM启动而创建

栈(stack):LIFO,应该叫做虚拟机栈,每个线程私有的,存放该线程调用的方法栈帧,存储局部变量表、操作数栈、程序出口、动态链接等,每一个方法的调用就是入栈出栈的过程。

方法区(non-heap):存放已经加载过的类信息、静态变量、常量等不容易发生GC的信息,由各个线程共享(由静态变量或者常量可推知)。

程序计数器:存放当前程序执行的字节码的行号指示器,如果执行的是native方法,则为undefined。

直接内存:既非Java运行时数据区的一部分,也不是JVM规范定义的内存部分,比Java->Native->内存要快,相对于普通堆内存,直接内存申请所花费的时间更多,但是读写的时间少。