大部分创建的对象都是在使用后结束,但是有的会存在很久。所以考虑gc的时候会考虑生命周期短,生命周期长,大对象,小对象。
生命周期短或者小对象此时可能就需要频繁的gc,把对象从内存释放掉。如果对象比较大,或者生命周期长就不需要gc,因为这种对象一般在old,如果heap过小此时就会被迫对old区域进行gc,从而导致full gc,此种情况下对性能的影响极大。所以一般会尽可能大的设置较大的heap。
gc的流程:
gc时会扫描young,from,to把不用的对象释放掉,同时把使用中的对象放到to中,此时如果对象大或者from和to的空间满时直接放到old中。young中的对象转移采用复制的方式,优点在于不会产生碎片用空间换取时间。