对于每一种编程语言,理解它的内存模型是理所当然的重要。下面我们从jvm的内存模型来体会下java(不限java语言,严格来讲是JVM内存模型,所有JVM体系的变成语言均适用)的内存模型。
堆: 就是我们写程序new出来的对象存放的内存。
方法区:就是存放类字节码和常量的内存。
虚拟机栈:就是局部变量(方法内定义的变量以及方法的入参、返回值),线程栈的内存。
本地方法区: 就是jvm本地调用时使用的内存。
程序计数器:就是程序运行到字节码哪行的指示器的内存。
好了,看如下一段代码:
当我们执行上面代码的时候,内存大致如下布局
相信结合着静态代码和图,大家对于线程在jvm内存中的分布就一目了然。上面有个程序计数器没有讲,这里简单补充下,程序计数器是被线程持有的,也就是每个线程都有有个程序计数器,用于指示当前线程执行到那个指令,程序计数器占用的内存大小是非常小的,在实际应用中我们时常忽略不计这部分内存。好了内存模型部分讲的差不多了,下节开始正式java 多线程之旅。本节内容属于个人理解,如有错漏之处,欢迎之处,不胜感激。