不懂java,看到个文档不错,抄抄摘摘!
原文见
数据类型: 基本类型和引用类型.
基本类型代表数据本身.
引用类型代表某个对象的引用,对象本身放在引用值所表示的内存空间(堆).
栈与堆栈是运行时单位,每个线程都有一个线程栈,代表处理逻辑.
堆是存储的单位,所有线程共享一个堆,堆代表了数据.
栈中存的是数据类型,堆中存的是对象.
参数传递java参数传递传值调用.
基本类型和引用类型的处理一样.传引用类型的方法调用可理解为"传引用值"的传值调用.
对象大小java对象至少为8byte(空对象),且必须为8的倍数.
垃圾回收算法按基本回收策略: (1)引用计数 (2)标记-清除 (3)复制 (4)标记-整理
按分区对待方式: (1)增量收集 (2)分代收集
按系统线程方式: (1)串行收集 (2)并行收集 (3)并发收集
垃圾判断以栈和寄存器中的引用为起点,找到堆中的对象,又从这些对象中找出对其他对象的引用,逐渐扩展,最后以null引用或基本类型结束,这样将形成多棵以栈中引用对应的对象为根节点的对象树.对象树上的对象即为运行需要的对象,而其他剩余的对象即被当作垃圾回收.
分代虚拟机共划分为三个代: 年轻代(Young Generation) 年老代(Old Generation) 持久代(Permanent Space)
年轻代
年轻代分为一个Eden区和两个Survivor区.
大部分对象在Eden区生成.当Eden满后,进行gc,还存活的放入其中一个Survivor区,当Survivor也满了,存活的将复制到另一个Survivor区,当这一个Survivor也满了,从第一个Survivor复制过来还存活的将复制到Terured年老区.即一个存活的对象要经过Eden区和2个Survivor区最后才到Tenured区
年老代
年轻代中经过几次gc后仍然存活的对象,会被放入年老代中.年老代满了会触发Full Gc.
持久代
用于存放静态文件,如java类,方法.持久代对垃圾回收没有显著影响.
垃圾回收分代形式下,垃圾回收有两种类型:Scavenge Gc和Full Gc.
Scavenage Gc
当新对象生成,且在Eden分配内存失败,就会触发Scavenge Gc.对Eden区gc,清除非存活对象,把存活的对象移到Survivor区,然后整理Survivor区.
Full Gc
对整个堆进行处理,包括Young,Terured和Perm.年老代写满,持久代写满和System.gc()显示调用都会触发Full Gc.
jvm参数设置内存设置栈内存
-Xss
每个线程的栈大小
堆内存
-Xmx
堆最大值
-Xms
堆初始值
年轻代
-XX:NewSize=
年轻代初始值
-XX:MaxNewSize= 年轻代最大值
-XX:SurvivorRatio= Eden与2个Survivor的比值
-XX:MaxTenuringThreshold= gc时对象在Survivor区的移动次数
-Xmn 年轻代大小.覆盖前面的设置
年老代
-XX:NewRatio= 年轻代与年老代的比值
持久代
-XX:PermSize= 持久代初始值
-XX:MaxPermSize= 持久代最大值
回收器
串行收集器
用单线程处理垃圾回收.
-XX:+UseSerialGC 开关
并行收集器
适用于多线程多处理器,并行回收垃圾,默认对年轻代进行并行收集,java6老年代也支持.
-XX:+UseParallelGC 开关 年轻代并行回收,年老代串行回收
-XX:+UseParallelOldGC 年老代也并行回收
-XX:ParallelGCThreads= 并行回收的线程数,一般配置为CPU数
-XX:MaxGCPauseMillis= 设置并行收集最大暂停时间(毫秒)
-XX:GCTimeRatio= 设置垃圾回收时间占程序运行时间的百分比. 公式为1/(1+n)
并发收集器
并发进行,在应用不停止的情况下使用独立的垃圾回收线程.主要减少年老代的暂停时间.
年老代的并发收集使用标记-清除算法,易出现碎片,可设置参数定期进行压缩.
浮动垃圾:由于在应用运行中回收垃圾,在此之间产生的垃圾就叫浮动垃圾(floating garbage).一般需预留20%空间.
-XX:+UseConcMarkSweepGC 设置年老代为并发收集
-XX:+UseParNewGC 设置年轻代为并行收集,可与CMS收集同时使用
-XX:+UseCMSCompactAtFullCollection 使用并发收集器时,开启对年老代的压缩
-XX:CMSFullGCsBeforeCompaction= 上面配置开启的情况下,这里设置多少次Full GC后,对年老代进行压缩
辅助信息
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+DisableExplicitGC 禁止调用System.gc(),但jvm的gc仍然有效
A Collection of JVM Options
阅读(1187) | 评论(0) | 转发(0) |