Java垃圾自动回收机制(GC, Garbage Collection)
对象空间的分配:
使用new关键字创建对象即可
对象空间的释放:
将引用数据类型变量赋值null即可。垃圾回收器将负责回收所有“不可达”对象的内存空间。
现在的垃圾分类成为大家的很头疼的事情,需要自己识别,手动放入垃圾桶,就像传统C/C++语言中,程序猿需要负责自己回收已经分配内存,自己一点点管理内存,分配和释放,很是头大,我们也称之为显示垃圾回收。
-
显式回收垃圾回收的缺点:
① 程序忘记及时回收,从而导致内存泄露,降低系统性能。
② 程序错误回收程序核心类库的内存,导致系统崩溃。
-
但是Java具有非常强大垃圾回收机制。Java语言不需要程序员直接控制内存回收,是由JRE在后台自动回收不再使用的内存,称为垃圾回收机制(Garbage Collection)。
① 可以提高编程效率。
② 保护程序的完整性。
③ 其开销影响性能。Java虚拟机必须跟踪程序中有用的对象,确定哪些是无用的。
【示例】
for(int i=0;i<10000000;i++){
byte [] data = new byte[1024*1024*1024]; //1KB --> 1MB --> 1G
}
- jvm虚拟机参数设置:(步骤: Window --> Preferences --> Java --> Install JREs --> Edit编辑 --> Default VM arguments 输入下一行的内容)
-Xms2048m -Xmx2048m -Xmn768m -XX:+PrintGCDetails
分别代表初始堆内存和最大堆内存都为2048m,年轻代768m,打印垃圾回收的数据
最大堆内存通常不能超过主机内存的50%,配置根据2的次方来计算 年轻代设为最大堆内存的3/8
初始堆内存尽量和最大堆内存保持一致,减少垃圾收集的频率(垃圾收集也会消耗内存和CPU)