Java堆
1)是一个运行时数据区,类的对象从堆中分配空间;(new对象,GC销毁)
2)堆的优势:运行时动态分配内存空间,不必事先通知编译器。缺点:存取速度慢;
3)举例:String str1 = new String("aaa");
String str2 = new String("aaa");
最终:str1 != str2,new出来的存放堆中,每次调用都会新建一个对象;
Java栈
1)栈中存放基本数据类型的变量(byte、short、int、long、float、double、char、boolean)和对象的引用;
2)栈的优势:存取速度快,栈数据可共享;缺点:存放数据的大小需要编译时确定,缺乏灵活性;
3)举例:String str1 = "aaa";
String str2 = "aaa";
最终:str1 == str2, 内存中只存在一个对象“aaa”,栈共享,有利于节省空间;
Tomcat调优
1)maxThreads="300":设置当前Tomcat最大并发数,默认150,实际开发中,某个应用超过250个并发时会考虑应用服务器的集群;
2)minSpareThreads="50":设置当前Tomcat初始化时创建的线程,默认25;
3)acceptCount="250",当同事连接的人数达到maxThreads值时,还可以接收排队的连接数量,超过这个连接的则直接返回拒绝连接。默认100;
4)enableLookups=“false”:是否开启域名反查,一般设置为false来提高处理能力,它的取值还有true,一般很少使用。
5)maxKeepAliveRequests=“1”:nginx动态的转给tomcat,nginx是不能keepalive的,而tomcat端默认开启了keepalive,会等待keepalive的timeout,默认不设置就是使用connectionTimeout。所以必须设置tomcat的超时时间,并关闭tomcat的keepalive。否则会产生大量tomcat的socket timewait。maxKeepAliveRequests=”1”就可以避免tomcat产生大量的TIME_WAIT连接,从而从一定程度上避免tomcat假死。
JVM调优
如JAVA_OPTS=" JAVA_OPTS -Xmx512m -Xms512m -Xmn170m -Xss128k -XX:NewRatio=4 -XX:SurvivorRatio=4"
1)-Xmx512m:设置Java虚拟机的堆最大可用内存大小,单位:兆;整个堆大小=年轻代+年老代+持久代。持久代一般固定65m。
2)-Xms512m:设置Java虚拟机的堆的初始值内存大小,单位:兆,可以设置和-Xmx一样,避免每次垃圾回收完成后JVM重新分配内存;
3)-Xmn170m:设置年轻代内存大小,单位:兆,Sun官方推荐为整个堆的3/8。
4)-Xss128k:设置每个线程的栈大小。JDK5.0后每个线程大小为1M;
5)-XX:NewRatio=4:设置年轻代(Eden和2个Survivor区)与老年代的比值(不包含持久代),设置=4,则年轻代:老年代=1:4,年轻代占整个堆栈的1/5;
6)-XX:SurvivorRatio=4:设置年轻代中Eden区与Survivor区的比值,设置=4,则两个Survivor区与一个Eden区的比值为2:4,一个Survivor区占整个年轻代的1/6
7)-XX:MaxPermSize=16m:设置持久代为16m;
8)-XX:MaxTenuringThreshold=0;设置垃圾最大年龄;
串行收集器
1)-XX:+UseSerialGC:串行收集器,在整个扫描和复制过程采用单线程的方式来进行,适用于单CPU、新生代空间较小及对暂停时间要求不是非常高的应用上,是client级别默认的GC方式,JDK1.5之前;
并行收集器
1)-XX:+UseParallelGC:并行收集器(吞吐量邮箱),即在整个扫描和复制过程采用多线程的方式进行,适用于多CPU、对暂停时间要求较短的应用上,是server级别默认采用的GC方式。仅对年轻代有效。
2)-XX:ParallelGCThreads=4:配置并行收集器的线程数,即同事多少个线程一起进行垃圾回收。建议配置成处理器数目;
3)-XX:+UseParallelOldGC:配置年老代垃圾收集方式并行收集。JDK6.0支持对年老代并行收集;
4)-XX:MaxGCPauseMillis=100:设置每次年轻代垃圾回收的最长时间,如果无法满足此时间,JVM会自动调整年轻代大小;
5)-XX:+UseAdaptiveSizePolicy:并行收集器会自动选择年轻代区大小和相应的Survivor区比例,以达到目标系统规定的最低相应时间或者收集频率等;