GC这块,当java才入门的时候,老师说java不像c++,c语言需要对内存进行管理,java有垃圾回收机制,会自动进行回收,是实际的生产中也没关注过这些,现在回过头好好了解下,发现里面很有回收很多的机制。
####GC
GC(Garbage Collection)的基本原理:将内存中不再被使用的对象进行回收,GC中用于回收的方法称为收集器,由于GC需要消耗一些资源和时间,Java在对对象的生命周期特征进行分析后,按照新生代、旧生代的方式来对对象进行收集,以尽可能的缩短GC对应用造成的暂停。
不同的对象引用类型, GC会采用不同的方法进行回收,JVM对象的引用分为了四种类型:
###垃圾收集算法
标记阶段
标记存活对象
清除阶段
统一回收所有未标记的对象
缺点
会产生内存碎片,如果空间内存碎片太多,当程序产生大对象无法在堆中找到连续空间大小存放的时候,会强制发生GC
原理
内存一分为二,每次只使用其中一块,当一块内存没有连续空间存储对象的时候,会把存活下来的对象复制到另外一块内存中,然后一次性清除之前的哪块空间
优缺点
原理
优缺点
分代思想
###垃圾收集器-GC
-verbose:gc
打印GC日志信息
-XX:+PrintGCDetails
打印GC日志信息
-Xloggc:d:/gc.log
GC日志目录
-XX:+PrintHeapAtGC
每次一次GC后,都打印堆信息
-XX:+TraceClassLoading
类加载信息
-XX:+PrintClassHistogram
配置了该参数后,在程序执行过程中,按下Ctrl+Break后,就可以打印类的信息
PS:其实说这么多啊,最重要的还是使用打印的方式看看那个发生内存溢出的情况与数据操作有很大的关系,有助于优化程序。