java内存管理机制
转载:http://blog.csdn.net/tutngfei1129287460/article/details/7383480
a.java把内存分两种:一种是栈内存,另一种是堆内存;
1。在函数中定义的基本类型变量和对象的引用变量都在函数的栈内存中分配;2。堆内存用来存放由new创建的对象和数组以及对象的实例变量 在函数(代码块)中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量所分配的内存空间;在堆中分配的内存由java虚拟机的自动垃圾回收器来管理
b.分配 :内存的分配是由程序完成的,程序员需要通过关键字new 为每个对象申请内存空间 (基本类型除外),所有的对象都在堆 (Heap)中分配空间。
c. final问题:
final使得被修饰的变量"不变",但是由于对象型变量的本质是"引用",使得"不变"也有了两种含义:引用本身的不变?,和引用指向的对象不变。?
d. 如何把程序写得更健壮
1.尽早释放无用对象的引用,自动设置为null;
2.定义字符串应该尽量使用 String str="hello";
3.字符串处理,避免使用String,应大量使用StringBuffe;
4、尽量少用静态变量 ,因为静态变量是全局的,GC不会回收的;
5、尽量避免在类的构造函数里创建、初始化大量的对象;
6、尽量在合适的场景下使用对象池技术 以提高系统性能,缩减缩减开销
10、尽量少用finalize函数 ;
运算操作 |
示例 |
标准化时间 |
本地赋值 |
i = n |
1.0 |
实例赋值 |
this.i = n |
1.2 |
方法调用 |
Funct() |
5.9 |
新建对象 |
New Object() |
980 |
新建数组 |
New int[10] |
3100 |