Skip to content

Instantly share code, notes, and snippets.

@jackywyz
Created October 31, 2011 06:35
Show Gist options
  • Select an option

  • Save jackywyz/1327021 to your computer and use it in GitHub Desktop.

Select an option

Save jackywyz/1327021 to your computer and use it in GitHub Desktop.
Jvm虚拟机
//分代,计数,标记,复制
一)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收集器
串行,并行,并发。
一。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
1)ascii
一个字节,最右一位是0
2)unicode
两个字节UCS-2
3)utf-8是unicode的实现方式。是变长的,汉字有3个字节。
4) 国家标准
gb2312(简体) -> gbk -> gb18030
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