Created
October 31, 2011 06:35
-
-
Save jackywyz/1327021 to your computer and use it in GitHub Desktop.
Jvm虚拟机
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| //分代,计数,标记,复制 | |
| 一)GC类型 | |
| GC有两种类型:Scavenge GC和Full GC。 | |
| 1)Scavenge GC | |
| 一般情况下,当新对象生成,并且在Eden申请空间失败时,就好触发Scavenge GC,堆Eden区域进行GC,清除非存活对象,并且把尚且存活的对象移动到Survivor区。然后整理Survivor的两个区。 | |
| 2)Full GC | |
| 对整个堆进行整理,包括Young、Tenured和Perm。Full GC比Scavenge GC要慢,因此应该尽可能减少Full GC。有如下原因可能导致Full GC: | |
| a)Tenured被写满 | |
| b)Perm域被写满 | |
| c)System.gc()被显示调用 | |
| d)上一次GC之后Heap的各域分配策略动态变化 | |
| 二)GC收集器 | |
| 串行,并行,并发。 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 一。JVM主要包括类装载子系统,方法区,PC寄存器,堆和栈等内容 | |
| //**************************************** | |
| 1.Server端JVM最好将-Xms和-Xmx设为相同值。为了优化GC,最好让-Xmn值约等于-Xmx的1/3。 | |
| 2.一个GUI程序最好是每10到20秒间运行一次GC,每次在半秒之内完成。 | |
| 3. Xss为栈大小 | |
| -- Xms heap初始值 | |
| -- Xmn young 区大小 | |
| -- Xmx heap最大值 | |
| -XX:NewSize=n :设置年轻代大小 | |
| -XX:MaxTenuringThreshold=0:设置垃圾最大年龄 | |
| -XX:NewRatio=n: 设置年轻代和年老代的比值。如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4 | |
| -XX:SurvivorRatio=n :年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5 | |
| -XX:MaxPermSize=n :设置持久代大小(用于存放静态文件) | |
| 4. 关于年轻代:分eden和多个Survivor(一般两个),eden满,cp老活对象到第一个surv,当first surv慢,cp老活对象到第二个surv,第二个慢,cp到老年代。 | |
| '''jvm新的认识 | |
| 1) jvm分stack和heap | |
| 2) stack 放 方法,和方法变量,引用类型变量值放heap | |
| 3) heap放对象实例,实例的地址放stack | |
| 4) 局部变量的数据存储在栈中,栈中的局部变量随着方法的消失而消失;成员变量存储在堆中的对象里,由垃圾回收器负债回收 | |
| 5) 静态属性放stack,值放heap,静态常量和string放常量池。 | |
| 6) | |
| 二。1)类加载器 | |
| (由底向上检测,由高到底依次加载) | |
| Bootstrap ClassLoader | |
| 负责加载$JAVA_HOME中jre/lib/rt.jar里所有的class,由C++实现,不是ClassLoader子类 | |
| 2)Extension ClassLoader | |
| 负责加载java平台中扩展功能的一些jar包,包括$JAVA_HOME中jre/lib/*.jar或-Djava.ext.dirs指定目录下的jar包 | |
| 3)App ClassLoader | |
| 负责记载classpath中指定的jar包及目录中class | |
| 4)Custom ClassLoader | |
| 属于应用程序根据自身需要自定义的ClassLoader,如tomcat、jboss都会根据j2ee规范自行实现ClassLoader |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 1)ascii | |
| 一个字节,最右一位是0 | |
| 2)unicode | |
| 两个字节UCS-2 | |
| 3)utf-8是unicode的实现方式。是变长的,汉字有3个字节。 | |
| 4) 国家标准 | |
| gb2312(简体) -> gbk -> gb18030 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 1) | |
| java中基本类型的包装类的大部分都实现了常量池技术,这些类是Byte,Short,Integer,Long,Character,Boolean, | |
| 另外两种浮点数类型的包装类则没有实现。 | |
| 另外Byte,Short,Integer,Long,Character这5种整型的包装类也只是在对应值小于等于127时才可使用对象池,也即对象不负责创建和管理大于127的这些类的对象。 | |
| 对象池中对象的值的在[-128,127]之间,超过此范围的不会在对象池中缓存(因为常量池是byte 8位的 -2^7 ~ 2^7-1)。 | |
| 2) | |
| String也是实现了 | |
| 3)final static 常量 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment