1、jvm设置堆的空间不是越大越好的,太大的话,当gc开始的时候,用户线程全部停止,gc线程工作,由于空间较大,会话较长的时间。
2、32位的系统在设置jvm时,最大应该是2g多,而六十四位的系统则无限制(没做验证),
而jvm的最大堆大小受到三方面的限制:
相关操作系统的数据模型(32-bt还是64-bit)限制;
系统的可用虚拟内存限 制;
系统的可用物理内存限制。
3、分代垃圾回收描述
yong-年轻代:有三个区,一个Eden区,两个survivor区,大部分对象都是在Eden区生成。
Tenured-年老代:年老代存放的对象是从年轻代存活的对象,一般来说,年老代存放的对象都是生命周期较长的对象。
perm-持久代:用于存放静态文件,如java类、方法,持久代对垃圾回收没有显著影响,但是有些应用可能动态生成或者调用一些class,例如Hibernate等, 在这种时候需要设置一个比较大的持久代空间来存放这些运行过程中新增的类。持久代大小通过-XX:MaxPermSize=进行设置。
4、gc类型
Scavenge GC:当新对象生成时,并且在Eden区申请空间失败时,就会触发Scavenge GC,对Eden区进行gc,清除非存活的对象,并把尚且存活的对象搬到survivor区,然后整理survivor的两个区。
Full gc:对整个堆进行整理,包括yong、tenured、perm,full gc比scavenge gc要慢,
如下情况会触发full gc:
Tenured被写满
Perm域被写满
System.gc()被显示调用
上一次GC之后Heap的各域分配策略动态变化
5、垃圾回收器
总共有三种:
串行收集器
--适用情况:数据量比较小(100M左右);单处理器下并且对响应时间无要求的应用。
--缺点:只能用于小型应用
并行收集器
--适用情况:“对吞吐量有高要求”,多CPU、对应用响应时间无要求的中、大型应用。举例:后台处理、科学计算。
--缺点:垃圾收集过程中应用响应时间可能加长
并发收集器
--适用情况:“对响应时间有高要求”,多CPU、对应用响应时间有较高要求的中、大型应用。举例:Web服务器/应用服务器、电信交换、集成开发环境。