java的内存分配
java将内存控制的权利交给了jvm,自己不用去分配与释放内存,但是内存一旦出现问题,如果你不了解虚拟机是怎么使用内存的,排查错误将会成为一项异常艰难的工作,因此我们要学习java的内存管理机制
- 程序计数器
在多线程下每一个线程都有一个程序计数器,我将它看做是一个按照顺序排列的一堆命令的集合 - java虚拟机栈
与程序计数器一样,也是线程私有的,存放基本类型与对象的引用的区域 - 本地方法栈
与虚拟器栈一样,但是这个区域是为native方法服务 - java堆
被所有线程共享的一块内存区域,存放对象的实例 - 方法区
也是线程共享的内存区域,它用于存储已被虚拟机加载的类信息,常量,静态变量,即使编译器编译后的代码等数据,也叫非堆(non-Heap) - 运行时常量池
是方法区的一部分,用于存放编译器生成的各种字面量和符号引用,这部分内容将在类加载后进入方法去的运行时常量池中存放 - 直接内存