对象是否存活算法:引用计数算法、可达性分析算法
给对象中添加一个引用计数器,引用它时,计数器值就加1;当引用失效时,计数值就减1;任何时刻计数器为0的对象就是不可能再被使用的。
虚拟机未采用这种算法,主要是因为该算法很难解决对象之间相互循环引用问题。
基本思路为:通过一系列的称为:“GC Roots” 的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路称为引用链,当一个对象到GC Roots没有任何引用链相连(就是从GC Roots到这个对象不可达)时,则证明此对象是不可用的。
在java语言可以做GC Roots的对象包括下面几种:
虚拟机栈中的引用的对象方法区中类静态属性引用的对象。方法区中常量引用的对象。本地方法栈中(即Native方法)引用的对象。主要回收两部分内容:废弃常量和无用的类。
无用的类的确认条件:
该类所有的实例都已经被回收,也就是Java堆中不存在该类的任何实例。加载该类的ClassLoader已经被回收。该类对应的java.lang.class对象没有在任何地方被引用,无法在任何地方通过反射访问该类的方法。这里说的仅仅是“可以”,并不会必然回收。是否对类进行回收,可以通过-Xnoclassgc参数进行控制。
Serial Old收集器:
并行(Parallel):指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态。 并发(Concurrent):指用户线程与垃圾收集线程同时执行(但不一定是并行的,可能会交替进行),用户程序在继续运行,而垃圾收集程序运行于另一个CPU上。
Parallel Old
CMS(Concurrent Mark Sweep) 垃圾收集器参数查看jvm参数
//查看 当前使用jdk的进程 下面这个5254为进程id; 在macox系统 ps -ef | grep java 501 5254 868 0 11:00下午 //查看当前jvm的参数 jcmd 868 VM.flags -XX:InitialHeapSize=41943040 -XX:MaxHeapSize=536870912 -XX:MaxPermSize=268435456 -XX:+UseComPRessedOops -XX:+UseParallelGC //显示系统内所有的java进程 jps -l 5482 sun.tools.jps.Jps 5440 org.jboss.modules.Main //显示jvm配置信息 jinfo -flags 5440 -agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:60380 -Dprogram.name=JBossTools: JBoss AS 7.1 -Xms64m -Xmx512m -XX:MaxPermSize=256m -Dorg.jboss.resolver.warning=true -Djava.net.preferipv4Stack=true -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true -Dorg.jboss.boot.log.file=/Users/zhangluxian/plusApp/jboss-as-7.1.1.Final/standalone/log/boot.log -Dlogging.configuration=file:/Users/zhangluxian/plusApp/jboss-as-7.1.1.Final/standalone/configuration/logging.properties -Djboss.home.dir=/Users/zhangluxian/plusApp/jboss-as-7.1.1.Final -Djboss.bind.address.management=localhost -Dfile.encoding=UTF-8新闻热点
疑难解答