本博文是参考
https://www.cnblogs.com/itcqx/p/5486174.html
https://www.javazhiyin.com/708.html
两位大佬的分享,而进一步自己总结的笔记
java内存分为以下几种:
1、寄存器(register):最快的存储区,由编译器根据需求进行分配,我们在程序中无法控制
2、栈(stack):存放基本数据类型和对象、数组的引用,但对象本身不在栈中,而是存放在堆中(new出来的额对象)或常量池中(字符串常量对象存放在常量池中)
1、每个线程私有,不能实现线程共享
2、局部变量放置在栈中
3、由系统自动分配,速度快,是一个连续的内存空间
4、后进先出
3、堆(heap):存放所有new出来的对象和数组
1、放置new出来的对象
2、是一个不连续的内存空间,分配灵活,速度慢
4、静态存储(static storage):存放静态成员
5、常量存储(constant storage): 存放字符串常量和基本类型常量(public static final)
6、非RAN存储:硬盘灯永久存储空间
7、方法区: 包含了静态存储、常量存储
1、被所有线程共享
2、用来存放程序中永远不变或唯一的内容(类代码信息、静态变量、字符串变量)
速度排行: 寄存器 > 栈 > 堆 > 其他