Java中方法参数的一些总结 本文关键词:参数,方法,Java
Java中方法参数的一些总结 本文简介:Java中方法参数的一些总结在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过学习技术知识提高解决问题的能力,这样我们才能走在最前方,更多Java学习,请搜索疯狂Java;Java程序设计语言使用值调用。也就是说,方法得到的是所有参数值的一个拷贝,特别是,方法不能修改传递给它的任何基本数据
Java中方法参数的一些总结 本文内容:
Java中方法参数的一些总结
在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过学习技术知识提高解决问题
的能力,这样我们才能走在最前方,更多Java学习,请搜索疯狂Java;
Java程序设计语言使用值调用。也就是说,方法得到的是所有参数值的一个拷贝,特别是,方法
不能修改传递给它的任何基本数据类
方法参数共有两种类型:
1、基本数据类型(数字、布尔值)。
2、对象引用。
一个方法不可能修改一个基本数据类型的参数。而对象引用作为参数就不同了,对象参数所
引用的对象状态是可以被改变的,因为方法
得到的是对象引用的拷贝,对象引用及其他的拷贝同时引用同一个对象。
Java程序设计语言对对象采用的不是引用调用,实际上,对象引用进行的是值传递。
总结Java程序设计语言中,方法参数的使用情况:
1、一个方法不能修改一个基本数据类型的参数(即数值开和布尔值)。
2、一个方法可以改变一个对象参数的状态。
3、一个方法对象参数引用一个新的对象不改变方法外对象的值。
package
com.action;
public
class
Test
{
private
static
int
i
=
1;
private
static
String
s
=
“string1“;
private
static
String[]
ss
=
{
“11“,“bb“,“cc“};
private
static
int
j
=
10;
public
int
ii;
static
{
System.out.println(“静态块1“);
System.out.println(i);
}
static
{
System.out.println(“静态块2“);
}
/**
@param
args/
public
static
void
main(String[]
args)
{
Test
t
=
new
Test();
t.changeInt(i);
System.out.println(“傳入int值:“+
i
+
“:::“+
j);
t.changeString(s);
System.out.println(“傳入String值1:“+
s);
t.changeString2(s);
System.out.println(“傳入String值2:“+
s);
t.changeStrings(ss);
System.out.println(“傳入数组:“+
ss[0]
);
t.changeTest(t);
System.out.println(“傳入對象“+t.i);
t.ii
=
111;
t.changeTest1(t);
System.out.println(t.ii);
}
public
void
changeInt(int
i)
{
i
=
10;
j++;
}
public
void
changeString(String
s)
{
s
=
new
String(“changeString“);
}
public
void
changeString2(String
s)
{
s.replace(“o“,“a“);
}
public
void
changeStrings(String[]
s)
{
s[0]
=
“numberChange“;
}
public
void
changeTest(Test
t)
{
Test
tt
=
new
Test();
tt.i
=
100;
t
=
tt;
}
public
void
changeTest1(Test
t)
{
Test
tt
=
new
Test();
tt.ii
=
1;
t
=
tt;
}
}
结果:
静态块1
1
静态块2
傳入int值:1:::11
傳入String值1:string1
傳入String值2:string1
傳入数组:numberChange
傳入對象100
111
一个方法中可以有多个静态块。
疯狂Java培训fkjava的课程采用针对性培养,全面提升学员就业能力,重点加强训练职业素质。老师辛勤的讲解,让学员充分感受Java的魅力,充分激发每个学员对于编程的热爱,让学员在半年的时间内掌握8-10万的代码量,成为真正的技术高手,疯狂Java采用企业全真模拟开发训练,迅速积累项目经验。让学员迅速获得其他人需要花费两年才能获得的工作技能,无忧就业!
篇2:阀门材料性能参数全
阀门材料性能参数全 本文关键词:阀门,性能参数,材料
阀门材料性能参数全 本文简介:阀门材料性能参数(3)PropertiesofValveMaterials(3)美国尼伯科有限公司合金ALLOY美国材料试验协会编号ASTMNO.其它合金规定OTHERALLOYDESIGNATION正常或最高化学含量NOMINALORMAXIMUMCHEMICALCOMPOSITION铝AL碳CA
阀门材料性能参数全 本文内容:
阀门材料性能参数
(3)
Properties
of
Valve
Materials
(3)
美国尼伯科有限公司
合金
ALLOY
美国材料试
验协会编号
ASTM
NO.
其它合金规定
OTHER
ALLOY
DESIGNATION
正常或最高化学含量
NOMINAL
OR
MAXIMUM
CHEMICAL
COMPOSITION
铝
AL
碳
CARBON
C
铬
CHROME
Cr
钴
COBALT
Co
铜
COPPER
Cu
铁
IRON
Fe
铅
LEAD
Pb
锰
MANGA-
NESE
Mn
钼
MOLYB-
NESE
Mo
不
锈
钢
精炼304
Wrot
304
铸造316
Cast
316
A
167
304
A
351
CF8M
UNS
S30400
UNS
S31600
0.08
0.08
19
20
2
1.5
2.5
铸造316
Cast
316
铸造316
Cast
316
A
743
CF16F
A
743
CF8M
0.16
0.08
20
20
1.5
1.5
1.5
2.5
精炼316
Wrot
316
铸造410
Cast
410
A
276
316
A
217
CA
15
UNS
S31600
0.08
0.15
17
13
2
1
2.5
锻造410
Forged
410
精炼
410
Wrot
410
A
182
F6A2
A
276
410
UNS
S41000
0.15
0.15
13
13
1
1
精炼416
Wrot
416
精炼420
Wrot
420
A
582
A
276
420
UNS
S41600
UNS
S42000
0.15
0.15
13
13
1.25
1
铸造合金20
Cast
Alloy
20
精炼合金20
Wrot
Alloy
20
A
743
CN7M
B
473
20C63
UNS
N08020
0.07
0.07
20
20
3.5
3.5
1.5
2
2.5
2.5
精炼17-4PH
Wrot
17-4PH
A
564
630
UNS
S17400
0.07
16
3.5
1
钢
阀
内
件
钢
锻造碳钢
Forged
Carbon
Steel
铸造碳钢
Cast
Carbon
Steel
A
105
A
216
WCB
0.35
0.3
1
1.1
DN32铸造铬钼钢
11/4
Cast
Cr.
Moly
Steel
铸造铬钼钢
Cast
Cr.
Moly
Steel
A
217
WC6
A
217
C5
0.2
0.2
1.2
5
0.7
0.55
0.55
0.55
铸造低碳钢
Cast
Low
Carbon
Steel
镍低碳钢
Nickel-Low
Carbon
Steel
A
352
LCB
A
352
LC2
0.3
0.25
1.0
0.65
B-7合金钢柱头螺栓
B-7
Alloy
Steel
Studs
304不锈钢螺母
304
SS
Nuts
A
193
B7
A
194
GR8
0.4
0.08
1
19
0.85
2
0.2
2-H合金钢螺母
2-H
Alloy
Steel
Nuts
普通钢螺栓
Reg.
Steel
Bolting
A
194
2H
A
307
Gr.
B
0.4
0.2
0.45
钢螺栓
Steel
Bolting
304不锈钢螺栓
304SS
Bolting
A
449
A
493
304
UNS
S30400
0.4
0.08
19
0.6
2
有眼螺栓
Eyebolts
压盖螺母
Gland
Nuts
A
489
A
563
Gr.
A
0.48
0.37
0.55
0.35
1.0
1.0
H/W螺母
H/W
Nuts
铰链螺栓销钉
Swing
Bolt
Pin
A
108
1020
A
108
1212
UNS
G10200
UNS
G12120
0.20
0.13
0.45
0.85
轭架衬套盖
Yoke
Bushing
Caps
阀座环基础
Seat
Ring
Base
A108
12L14
A
519
1026
0.15
0.25
.25
1.0
0.75
蒙
乃
尔
(商标材料,如:Stellite
6*,Stoody
6,和Wallex
6)
(Trademark
Materials
like,Stellite
6*,Stoody
6,and
Wallex
6)
AWS
5.13
1.25
29
55
2.5
铸造蒙乃尔
Cast
Monel
精炼蒙乃尔
(K-500)
Wrot
Monel
(K-500)
QQ-N-288-E
QQ-N-286-C1B
0.5
3.0
0.3
0.1
30
24
3.5
2.0
1.5
1.5
ALLOY
正常或最高化学含量
NOMINAL
OR
MAXIMUM
CHEMICAL
COMPOSITION
正常物理特性
NOMINAL
PHYSICAL
PROPERTIES
镍
NICKEL
Ni
磷
PHOS
P
硅
SILICON
Si
硫
SULFUR
S
锡
TIN
Sn
钛
TITAN-
IUM
Ti
钨
TUNG-
STEM
W
锌
ZINC
Zn
抗拉强度
TENSILE
STRENGTH
Psi
屈服强度
YIELD
STRENGTH
Psi
%
伸张度
ELONGATION
硬度
HARDENESS
不
锈
钢
精炼304
Wrot
304
铸造316
Cast
316
9
11
0.045
0.04
1.0
2.0
0.03
0.04
75,000
70,000
30,000
30,000
40
25
202
HB
铸造316
Cast
316
铸造316
Cast
316
11
12
0.04
0.045
2.0
1.0
0.04
0.03
70,000
75,000
30,000
30,000
30
30
精炼316
Wrot
316
铸造410
Cast
410
12
1
0.045
0.04
1.0
1.5
0.03
0.04
75,000
90,000
30,000
65,000
30
18
锻造410
Forged
410
精炼
410
Wrot
410
0.5
0.04
0.04
1.0
1.0
0.03
0.03
85,000
100,000
55,000
80,000
18
15
200/225
HB
精炼416
Wrot
416
精炼420
Wrot
420
0.06
0.04
1.0
1.0
0.15
0.03
114,000
95,000
17
235
HB
250/450
HB
铸造合金20
Cast
Alloy
20
精炼合金20
Wrot
Alloy
20
28
35
0.04
0.045
1.5
1.0
0.04
0.035
62,000
85,000
25,000
35,000
35
30
精炼17-4PH
Wrot
17-4PH
4
0.04
1.0
0.03
115,000
75,000
18
255
HB
钢
阀
内
件
钢
锻造碳钢
Forged
Carbon
Steel
铸造碳钢
Cast
Carbon
Steel
0.04
0.04
0.035
0.6
0.05
0.045
70,000
70,000
36,000
36,000
22
22
187
HB
DN32铸造铬钼钢
11/4
Cast
Cr.
Moly
Steel
铸造铬钼钢
Cast
Cr.
Moly
Steel
0.04
0.04
0.06
0.75
0.045
0.045
铸造低碳钢
Cast
Low
Carbon
Steel
镍低碳钢
Nickel-Low
Carbon
Steel
2.5
0.04
0.04
0.6
0.6
0.045
0.045
65,000
70,000
35,000
40,000
24
24
B-7合金钢柱头螺栓
B-7
Alloy
Steel
Studs
304不锈钢螺母
304
SS
Nuts
9
0.035
0.045
0.25
1.0
0.04
0.03
125,000
105,000
16
126/300
HB
2-H合金钢螺母
2-H
Alloy
Steel
Nuts
普通钢螺栓
Reg.
Steel
Bolting
0.04
0.04
0.05
0.05
100,000
18
250/300
HB
121/212
HB
钢螺栓
Steel
Bolting
304不锈钢螺栓
304SS
Bolting
9
0.04
0.045
1.0
0.05
0.03
120,000
90,000
92,000
14
有眼螺栓
Eyebolts
压盖螺母
Gland
Nuts
0.35
0.04
0.04
0.25
0.2
0.05
0.05
75,000
30,000
30
H/W螺母
H/W
Nuts
铰链螺栓销钉
Swing
Bolt
Pin
0.04
0.10
0.05
0.20
120/300
HB
轭架衬套盖
Yoke
Bushing
Caps
阀座环基础
Seat
Ring
Base
0.07
0.04
0.3
0.05
55,000
35,000
25
蒙
乃
尔
(商标材料,如:Stellite
6*,Stoody
6,和Wallex
6)
(Trademark
Materials
like,Stellite
6*,Stoody
6,and
Wallex
6)
3
5
105,000
10
350
HB
铸造蒙乃尔
Cast
Monel
精炼蒙乃尔
(K-500)
Wrot
Monel
(K-500)
60
67
1.5
0.5
0.01
0.5
65,000
135,000
32,500
95,000
25
20
125/150
HB
255
HB
篇3:javajvm参数-Xms-Xmx-Xmn-Xss调优总结
javajvm参数-Xms-Xmx-Xmn-Xss调优总结 本文关键词:参数,Xms,javajvm,Xss,Xmn
javajvm参数-Xms-Xmx-Xmn-Xss调优总结 本文简介:javajvm参数-Xms-Xmx-Xmn-Xss调优总结常见配置举例堆大小设置JVM中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制.32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制.我在Windo
javajvm参数-Xms-Xmx-Xmn-Xss调优总结 本文内容:
java
jvm
参数
-Xms
-Xmx
-Xmn
-Xss
调优总结
常见配置举例
堆大小设置
JVM
中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制.32位系统
下,一般限制在1.5G~2G;64为操作系统对内存无限制.我在Windows
Server
2003
系统,3.5G物理内存,JDK5.0下测试,最大可设置为1478m.
典型设置:
java
-Xmx3550m
-Xms3550m
-Xmn2g
-Xss128k
-Xmx3550m:设置JVM最大可用内存为3550M.
-Xms3550m:设置JVM促使内存为3550m.此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存.
-Xmn2g:设置年轻代大小为2G.整个堆大小=年轻代大小
+
年老代大小
+
持久代大小.持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小.此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8.
-Xss128k:
设置每个线程的堆栈大小.JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K.更具应用的线程所需内存大小进行
调整.在相同物理内存下,减小这个值能生成更多的线程.但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右.
java
-Xmx3550m
-Xms3550m
-Xss128k
-XX:NewRatio=4
-XX:SurvivorRatio=4
-XX:MaxPermSize=16m
-XX:MaxTenuringThreshold=0
-XX:NewRatio=4:设置年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代).设置为4,则年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5
-XX:SurvivorRatio=4:设置年轻代中Eden区与Survivor区的大小比值.设置为4,则两个Survivor区与一个Eden区的比值为2:4,一个Survivor区占整个年轻代的1/6
-XX:MaxPermSize=16m:设置持久代大小为16m.
-XX:MaxTenuringThreshold=0:
设置垃圾最大年龄.如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代.
对于年老代比较多的应用,可以提高效率.如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活
时间,增加在年轻代即被回收的概论.
回收器选择
JVM给了三种选择:串行收集器,并行收集器,并发收集器,但是串行收集器只适用于小数据
量的情况,所以这里的选择主要针对并行收集器和并发收集器.默认
情况下,JDK5.0以前都是使用串行收集器,如果想使用其他收集器需要在启动时加入相应参数.JDK5.0以后,JVM会根据当前系统配置进行判断.
吞吐量优先的并行收集器
如上文所述,并行收集器主要以到达一定的吞吐量为目标,适用于科学技术和后台处理等.
典型配置:
java
-Xmx3800m
-Xms3800m
-Xmn2g
-Xss128k
-XX:+UseParallelGC
-XX:ParallelGCThreads=20
-XX:+UseParallelGC:选择垃圾收集器为并行收集器.此配置仅对年轻代有效.即上述配置下,年轻代使用并发收集,而年老代仍旧使用串行收集.
-XX:ParallelGCThreads=20:配置并行收集器的线程数,即:同时多少个线程一起进行垃圾回收.此值最好配置与处理器数目相等.
java
-Xmx3550m
-Xms3550m
-Xmn2g
-Xss128k
-XX:+UseParallelGC
-XX:ParallelGCThreads=20
-XX:+UseParallelOldGC
-XX:+UseParallelOldGC:配置年老代垃圾收集方式为并行收集.JDK6.0支持对年老代并行收集.
java
-Xmx3550m
-Xms3550m
-Xmn2g
-Xss128k
-XX:+UseParallelGC
-XX:MaxGCPauseMillis=100
-XX:MaxGCPauseMillis=100:设置每次年轻代垃圾回收的最长时间,如果无法满足此时间,JVM会自动调整年轻代大小,以满足此值.
java
-Xmx3550m
-Xms3550m
-Xmn2g
-Xss128k
-XX:+UseParallelGC
-XX:MaxGCPauseMillis=100
-XX:+UseAdaptiveSizePolicy
-XX:+UseAdaptiveSizePolicy:设置此选项后,并行收集器会自动选择年轻代区大小和相应的Survivor区比例,以达到目标系统规定的最低相应时间或者收集频率等,此值建议使用并行收集器时,一直打开.
响应时间优先的并发收集器
如上文所述,并发收集器主要是保证系统的响应时间,减少垃圾收集时的停顿时间.适用于应用服务器,电信领域等.
典型配置:
java
-Xmx3550m
-Xms3550m
-Xmn2g
-Xss128k
-XX:ParallelGCThreads=20
-XX:+UseConcMarkSweepGC
-XX:+UseParNewGC
-XX:+UseConcMarkSweepGC:设置年老代为并发收集.测试中配置这个以后,-XX:NewRatio=4的配置失效了,原因不明.所以,此时年轻代大小最好用-Xmn设置.
-XX:+UseParNewGC:设置年轻代为并行收集.可与CMS收集同时使用.JDK5.0以上,JVM会根据系统配置自行设置,所以无需再设置此值.
java
-Xmx3550m
-Xms3550m
-Xmn2g
-Xss128k
-XX:+UseConcMarkSweepGC
-XX:CMSFullGCsBeforeCompaction=5
-XX:+UseCMSCompactAtFullCollection
-XX:CMSFullGCsBeforeCompaction:由于并发收集器不对内存空间进行压缩,整理,所以运行一段时间以后会产生“碎片“,使得运行效率降低.此值设置运行多少次GC以后对内存空间进行压缩,整理.
-XX:+UseCMSCompactAtFullCollection:打开对年老代的压缩.可能会影响性能,但是可以消除碎片
辅助信息
JVM提供了大量命令行参数,打印信息,供调试使用.主要有以下一些:
-XX:+PrintGC
输出形式:[GC
118250K->113543K(130112K),0.0094143
secs]
[Full
GC
121376K->10414K(130112K),0.0650971
secs]
-XX:+PrintGCDetails
输出形式:[GC
[DefNew:
8614K->781K(9088K),0.0123035
secs]
118250K->113543K(130112K),0.0124633
secs]
[GC
[DefNew:
8614K->8614K(9088K),0.0000665
secs][Tenured:
112761K->10414K(121024K),0.0433488
secs]
121376K->10414K(130112K),0.0436268
secs]
-XX:+PrintGCTimeStamps
-XX:+PrintGC:PrintGCTimeStamps可与上面两个混合使用
输出形式:11.851:
[GC
98328K->93620K(130112K),0.0082960
secs]
-XX:+PrintGCApplicationConcurrentTime:打印每次垃圾回收前,程序未中断的执行时间.可与上面混合使用
输出形式:Application
time:
0.5291524
seconds
-XX:+PrintGCApplicationStoppedTime:打印垃圾回收期间程序暂停的时间.可与上面混合使用
输出形式:Total
time
for
which
application
threads
were
stopped:
0.0468229
seconds
-XX:PrintHeapAtGC:打印GC前后的详细堆栈信息
输出形式:
34.702:
[GC
{Heap
before
gc
invocations=7:
def
new
generation
total
55296K,used
52568K
[0x1ebd0000,0x227d0000,0x227d0000)
eden
space
49152K,99%
used
[0x1ebd0000,0x21bce430,0x21bd0000)
from
space
6144K,55%
used
[0x221d0000,0x22527e10,0x227d0000)
to
space
6144K,0%
used
[0x21bd0000,0x21bd0000,0x221d0000)
tenured
generation
total
69632K,used
2696K
[0x227d0000,0x26bd0000,0x26bd0000)
the
space
69632K,3%
used
[0x227d0000,0x22a720f8,0x22a72200,0x26bd0000)
compacting
perm
gen
total
8192K,used
2898K
[0x26bd0000,0x273d0000,0x2abd0000)
the
space
8192K,35%
used
[0x26bd0000,0x26ea4ba8,0x26ea4c00,0x273d0000)
ro
space
8192K,66%
used
[0x2abd0000,0x2b12bcc0,0x2b12be00,0x2b3d0000)
rw
space
12288K,46%
used
[0x2b3d0000,0x2b972060,0x2b972200,0x2bfd0000)
34.735:
[DefNew:
52568K->3433K(55296K),0.0072126
secs]
55264K->6615K(124928K)Heap
after
gc
invocations=8:
def
new
generation
total
55296K,used
3433K
[0x1ebd0000,0x227d0000,0x227d0000)
eden
space
49152K,0%
used
[0x1ebd0000,0x1ebd0000,0x21bd0000)
from
space
6144K,55%
used
[0x21bd0000,0x21f2a5e8,0x221d0000)
to
space
6144K,0%
used
[0x221d0000,0x221d0000,0x227d0000)
tenured
generation
total
69632K,used
3182K
[0x227d0000,0x26bd0000,0x26bd0000)
the
space
69632K,4%
used
[0x227d0000,0x22aeb958,0x22aeba00,0x26bd0000)
compacting
perm
gen
total
8192K,used
2898K
[0x26bd0000,0x273d0000,0x2abd0000)
the
space
8192K,35%
used
[0x26bd0000,0x26ea4ba8,0x26ea4c00,0x273d0000)
ro
space
8192K,66%
used
[0x2abd0000,0x2b12bcc0,0x2b12be00,0x2b3d0000)
rw
space
12288K,46%
used
[0x2b3d0000,0x2b972060,0x2b972200,0x2bfd0000)
},0.0757599
secs]
-Xloggc:filename:与上面几个配合使用,把相关日志信息记录到文件以便分析.
常见配置汇总
堆设置
-Xms:初始堆大小
-Xmx:最大堆大小
-XX:NewSize=n:设置年轻代大小
-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:设置持久代大小
收集器设置
-XX:+UseSerialGC:设置串行收集器
-XX:+UseParallelGC:设置并行收集器
-XX:+UseParalledlOldGC:设置并行年老代收集器
-XX:+UseConcMarkSweepGC:设置并发收集器
垃圾回收统计信息
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-Xloggc:filename
并行收集器设置
-XX:ParallelGCThreads=n:设置并行收集器收集时使用的CPU数.并行收集线程数.
-XX:MaxGCPauseMillis=n:设置并行收集最大暂停时间
-XX:GCTimeRatio=n:设置垃圾回收时间占程序运行时间的百分比.公式为1/(1+n)
并发收集器设置
-XX:+CMSIncrementalMode:设置为增量模式.适用于单CPU情况.
-XX:ParallelGCThreads=n:设置并发收集器年轻代收集方式为并行收集时,使用的CPU数.并行收集线程数.
调优总结
年轻代大小选择
响应时间优先的应用:尽可能设大,直到接近系统的最低响应时间限制(根据实际情况选择).在此种情况下,年轻代收集发生的频率也是最小的.同时,减少到达年老代的对象.
吞吐量优先的应用:尽可能的设置大,可能到达Gbit的程度.因为对响应时间没有要求,垃圾收集可以并行进行,一般适合8CPU以上的应用.
年老代大小选择
响
应时间优先的应用:年老代使用并发收集器,所以其大小需要小心设置,一般要考虑并发会话率和会话持续时间等一些参数.如果堆设置小了,可以会造成内存碎
片,高回收频率以及应用暂停而使用传统的标记清除方式;如果堆大了,则需要较长的收集时间.最优化的方案,一般需要参考以下数据获得:
并发垃圾收集信息
持久代并发收集次数
传统GC信息
花在年轻代和年老代回收上的时间比例
减少年轻代和年老代花费的时间,一般会提高应用的效率
吞吐量优先的应用:一般吞吐量优先的应用都有一个很大的年轻代和一个较小的年老代.原因是,这样可以尽可能回收掉大部分短期对象,减少中期的对象,而年老代尽存放长期存活对象.
较小堆引起的碎片问题
因
为年老代的并发收集器使用标记,清除算法,所以不会对堆进行压缩.当收集器回收时,他会把相邻的空间进行合并,这样可以分配给较大的对象.但是,当堆空
间较小时,运行一段时间以后,就会出现“碎片“,如果并发收集器找不到足够的空间,那么并发收集器将会停止,然后使用传统的标记,清除方式进行回收.如果
出现“碎片“,可能需要进行如下配置:
-XX:+UseCMSCompactAtFullCollection:使用并发收集器时,开启对年老代的压缩.
-XX:CMSFullGCsBeforeCompaction=0:上面配置开启的情况下,这里设置多少次Full
GC后,对年老代进行压缩
在
同一个工程下,有两个类,这两个类中只有很少的变动,而最关健的FOR却没有一点变动,可是当我分别运行这两个程序的时候却出现一个很严重的问题,一个程
序循环的快,一个循环的慢.这到底是怎么回事呢~???苦苦寻找了半天也没有想到是为什么,因为程序改变的部分根不影响我循环的速度,可是结果却是有很大
的差别,一个大约是在一分钟这内就可以循环完,可是另一个却需要六七分钟,这根本就不是一个数据理级的麻.两个完全一样的循环,从代码上根本上是看不出有
什么问题.不得以求助同事吧,可是同事看了也感觉很诡异,两个人在那订着代码又看了一个多小时,最后同事让我来个干净点的,关机重启.我到也听话,就顺着
同事的意思去了,可就在关机的这个时候他突然说是不是内存的问题,我也空然想到了,还真的有可能是内存的问题,因为快的那个在我之前运行程序之前可给过
1G的内存啊,而后来的这个我好像是没有设过内存啊,机器起来了,有了这个想法进去看看吧,结果正中要害,果真是慢的那个没有开内存,程序运行时只不过是
JVM默认开的内存.我初步分析是因为内存太小,而我的程序所用内存又正好卡在JVM所开内存边上,不至于溢出.当程序运行时就得花费大部分时间去调用
GC去,这样就导致了为什么相同的循环出现两种不同的效率~!
顺便把内存使用情况的方法也贴出来:
public
static
String
getMemUsage()
{
long
free
=
java.lang.Runtime.getRuntime().freeMemory();
long
total
=
java.lang.Runtime.getRuntime().totalMemory();
StringBuffer
buf
=
new
StringBuffer();
buf.append(“[Mem:
used
“).append((total-free)>>20)
.append(“M
free
“).append(free>>20)
.append(“M
total
“).append(total>>20).append(“M]“);
return
buf.toString();
}
google一下,大概就说JVM是这样来操作内存:
堆(Heap)和非堆(Non-heap)内存
按
照官方的说法:“Java
虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配.堆是在
Java
虚拟机启动时创建的.““在JVM中堆之外的内存称为非堆内存(Non-heap
memory)“.可以看出JVM主要管理两种类型的内存:堆和非堆.简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给
自己用的,所以方法区,JVM内部处理或优化所需的内存(如JIT编译后的代码缓存),每个类结构(如运行时常数池,字段和方法数据)以及方法和构造方法
的代码都在非堆内存中.
堆内存分配
JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的内存由-Xmx指
定,默认是物理内存的1/4.默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制.因此服务器一般设置-Xms,-Xmx相等以避免在每次GC
后调整堆的大小.
非堆内存分配
JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4.
JVM内存限制(最大值)
首
先JVM内存首先受限于实际的最大物理内存,假设物理内存无限大的话,JVM内存的最大值跟操作系统有很大的关系.简单的说就32位处理器虽然可控内存空
间有4GB,但是具体的操作系统会给一个限制,这个限制一般是
2GB-3GB(一般来说Windows系统下为1.5G-2G,Linux系统下为2G-3G),而64bit以上的处理器就不会有限制了
JVM内存的调优
1.
Heap设定与垃圾回收Java
Heap分为3个区,Young,Old和Permanent.Young保存刚实例化的对象.当该区被填满时,GC会将对象移到Old
区.Permanent区则负责保存反射对象,本文不讨论该区.JVM的Heap分配可以使用-X参数设定,-Xms
初始Heap大小
-Xmx
java
heap最大值
-Xmn
young
generation的heap大小
JVM有2个GC线程.第一个线程负责回收Heap的Young区.第二个线程在Heap不足时,遍历Heap,将Young
区升级为Older区.Older区的大小等于-Xmx减去-Xmn,不能将-Xms的值设的过大,因为第二个线程被迫运行会降低JVM的性能.
为什么一些程序频繁发生GC?有如下原因:
l
程序内调用了System.gc()或Runtime.gc().
l
一些中间件软件调用自己的GC方法,此时需要设置参数禁止这些GC.
l
Java的Heap太小,一般默认的Heap值都很小.
l
频繁实例化对象,Release对象.此时尽量保存并重用对象,例如使用StringBuffer()和String().
如果你发现每次GC后,Heap的剩余空间会是总空间的50%,这表示你的Heap处于健康状态.许多Server端的Java程序每次GC后最好能有65%的剩余空间.经验之谈:
1.Server端JVM最好将-Xms和-Xmx设为相同值.为了优化GC,最好让-Xmn值约等于-Xmx的1/3[2].
2.一个GUI程序最好是每10到20秒间运行一次GC,每次在半秒之内完成[2].
注意:
1.增加Heap的大小虽然会降低GC的频率,但也增加了每次GC的时间.并且GC运行时,所有的用户线程将暂停,也就是GC期间,Java应用程序不做任何工作.
2.Heap大小并不决定进程的内存使用量.进程的内存使用量要大于-Xmx定义的值,因为Java为其他任务分配内存,例如每个线程的Stack等.
2.Stack的设定
每个线程都有他自己的Stack.
-Xss
每个线程的Stack大小
Stack的大小限制着线程的数量.如果Stack过大就好导致内存溢漏.-Xss参数决定Stack大小,例如-Xss1024K.如果Stack太小,也会导致Stack溢漏.
3.硬件环境
硬件环境也影响GC的效率,例如机器的种类,内存,swap空间,和CPU的数量.
如果你的程序需要频繁创建很多transient对象,会导致JVM频繁GC.这种情况你可以增加机器的内存,来减少Swap空间的使用[2].
4.4种GC
第一种为单线程GC,也是默认的GC.,该GC适用于单CPU机器.
第二种为Throughput
GC,是多线程的GC,适用于多CPU,使用大量线程的程序.第二种GC与第一种GC相似,不同在于GC在收集Young区是多线程的,但在Old区和第一种一样,仍然采用单线程.-XX:+UseParallelGC参数启动该GC.
第三种为Concurrent
Low
Pause
GC,类似于第一种,适用于多CPU,并要求缩短因GC造成程序停滞的时间.这种GC可以在Old区的回收同时,运行应用程序.-XX:+UseConcMarkSweepGC参数启动该GC.
第四种为Incremental
Low
Pause
GC,适用于要求缩短因GC造成程序停滞的时间.这种GC可以在Young区回收的同时,回收一部分Old区对象.-Xincgc参数启动该GC.