Chinaunix首页 | 论坛 | 博客
  • 博客访问: 475491
  • 博文数量: 104
  • 博客积分: 3455
  • 博客等级: 中校
  • 技术积分: 1216
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-18 18:33
文章分类

全部博文(104)

文章存档

2015年(3)

2014年(1)

2013年(7)

2012年(8)

2011年(11)

2010年(18)

2009年(56)

我的朋友

分类:

2010-07-19 21:19:31

不懂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) |
0

上一篇:一年之痒

下一篇:HTTP Cache

给主人留下些什么吧!~~