Java内存分配:
ⅰ、寄存器:我们在程序中无法控制
ⅱ、栈区:
1、存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中;
2、每个栈中的数据都是私有的,其它栈不能访问;
3、栈区分为3个部分:基本类型变量区、执行环境上下文、操作指令区。
ⅲ、堆区:
1、存储的全部是对象,每个对象都包含一个与之对应的class信息;
2、Jvm 只有一个堆区(heap)被所有线程共享,存放用new产生的数据。
ⅳ、静态域:
1、静态域又称为方法区,被所有的线程共享。方法区包含所有的class和static变量。
2、方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。
常量池:存放常量
ⅴ、常量池:
1、常量池就是用来保存在编译阶段确定好了大小的数据;
2、除了包含代码中所定义的各种基本类型(如int、long等等)和对象型(如String及数组)的常量值(final)还包含一些以文本形式出现的符号引用,比如: 类和接口的全限定名; 字段的名称和描述符; 方法和名称和描述符。
3、在程序执行的时候,常量池会储存在Method Area,而不是堆中.
ⅵ、非RAM(随机存取存储器)存储:
1、硬盘等永久存储空间
对于内存的碎片化/空间不足等问题是如何处理的?垃圾是不是不到空间不足不会回收?
对于第一个问题还没有遇到过;
第二个问题,不是这样的,java中有垃圾回收机制,它可以自动回收堆中的垃圾。
希望对你有帮助。 |