文章由问题产生,问:目前存在多个类,这些类里面有类成员变量(基本类型和引用类型),有静态方法,有静态变量,也有普通方法,这些数据和代码分别存在java内存模型的哪些地方?
回答: java内存模型中有堆,方法区,虚拟机栈(一般说栈就是指虚拟机栈),本地方法栈(用来执行本地方法的栈),程序计数器(指示程序执行到哪个地方)
通过new创建的对象,不管你属于哪个类,统一存储在java堆中。栈中通过引用,堆中的内存区域,来获得自己想要的数据。
方法区中,存储类的信息。类的成员变量(基本类型和引用类型),它们都是对象的一部分,所以它们和对象一样,存储在堆中。
静态变量存储在静态存储区。普通方法和静态方法,存储在方法区中。
当存在多个线程时,多个线程共享堆,和方法区。堆中的对象和方法区中的方法,有多个线程同时访问修改时,需要加锁。
栈和程序计数器,是线程隔离的。即每个线程,都有自己的栈和程序计数器。