问题很多,本然还有很多常识不懂~~所以,你懂哪个回答哪个好了
1.Java的堆是一个运行时数据区,类的对象从中分配空间。这些对象通过NEW、newarray、anewarray、multianewarray、等指令建立、他们不需要程序代码来显示的释放。(什么叫运行时数据库 我只学过new创建对象,后面3个关键字没见过 什么叫程序代码来显示的释放)
2.堆的优势是可以动态分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。(什么是动态分配,生存期,垃圾收集器 另外这句话我也不明白)
3.存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类型的变量和对象句柄。(对象句柄,什么意思 这句话不明白)
4.JVM是什么
5.由于string类的immutable性质,当string变量需要经常变换其值时,应该考虑使用stringbuffer类,以便提高程序效率。(string类的immutable性质是什么 这句话不明白)
6.
2.1 内存分配策略
按照编译原理的观点,程序运行时的内存分配有三种策略,分别是静态的,栈式的,和堆式的.
静态存储分配是指在编译时就能确定每个数据目标在运行时刻的存储空间需求,因而在编译时就可以给他们分配固定的内存空间.这种分配策略要求程序代码中不允许有可变数据结构(比如可变数组)的存在,也不允许有嵌套或者递归的结构出现,因为它们都会导致编译程序无法计算准确的存储空间需求.
栈式存储分配也可称为动态存储分配,是由一个类似于堆栈的运行栈来实现的.和静态存储分配相反,在栈式存储方案中,程序对数据区的需求在编译时是完全未知的,只有到运行的时候才能够知道,但是规定在运行中进入一个程序模块时,必须知道该程序模块所需的数据区大小才能够为其分配内存.和我们在数据结构所熟知的栈一样,栈式存储分配按照先进后出的原则进行分配。
静态存储分配要求在编译时能知道所有变量的存储要求,栈式存储分配要求在过程的入口处必须知道所有的存储要求,而堆式存储分配则专门负责在编译时或运行时模块入口处都无法确定存储要求的数据结构的内存分配,比如可变长度串和对象实例.堆由大片的可利用块或空闲块组成,堆中的内存可以按照任意顺序分配和释放.
(什么是编程原理的观点? 另外这大段我都看不明白 )
这篇关于堆与栈的文章网上被复制了很多,基本上从2.1开始后面的我就完全不懂了。
7.在问个什么是指针