JVA堆栈内存堆栈内存
Java将内存分为堆栈内存和堆内存两种,具有不同的作用。 堆栈内存存储局部变量和方法调用。
堆栈内存属于单个线程,每个线程都有堆栈内存,存储的变量只能在所属线程中看到。 这意味着堆栈内存可以理解为线程的专用内存。
堆内存中的对象显示在所有线程上。 堆中的对象可以由所有线程访问。 堆内存用于存储Java中的对象。 无论是成员变量、局部变量还是类变量,它们指向的对象都存储在堆内存中。
参照变量是普通变量,定义时为堆栈分配内存,参照变量在程序运行时释放到范围外。 序列&; 对象本身被分配给堆,即使程序运行在包含使用new生成数组和对象的语句的代码块之外,也不会释放数组和对象本身占用的堆内存。 当引用变量不指向它时,数组和对象会变成垃圾,无法使用,但会占用内存,并在随后的不确定时间被垃圾收集器释放。 这也是java占用内存的主要原因。 实际上,堆栈中的变量指向堆内存中的变量。 这就是java中的指针。
javaGC和调谐
Java的垃圾回收机制在GC线程上运行,是Java虚拟机自身使用的守护程序线程。 负责打扫所谓“达不到”的对象。 程序创建对象后,GC将开始监视该对象的地址、大小和使用情况。 GC在判断部分对象为“不可到达”的情况下,负责回收这些存储器区域。
调整时可以参照的jvm的一般参数如下所示
参数名称
意思是
默认值
-Xms
初始堆大小
物理内存的1/64 ) 1GB
缺省值(可通过MinHeapFreeRatio参数调整)如果可用堆内存小于40%,JVM会将堆增加到-Xmx的最大限制。
-Xmx
最大堆大小
1/4物理内存) 1GB
默认(可通过MaxHeapFreeRatio参数调整)如果可用堆内存超过70%,JVM将减少堆的最小限制,直到-Xms
-Xmn
年轻一代的大小(1.4or lator )。
注意:此处的大小为“Eden 2服务空间”。 与jmap -heap中显示的New gen不同。
整个堆大小=年轻一代的大小;老一代的大小;持续一代的大小
增加年轻一代的话,老一代的尺寸会变小。 此值对系统性能有很大影响,Sun政府建议将其配置为整个堆的3/8
-XX:NewSize
设定年轻一代的大小(for 1.3/1.4 )
-XX:MaxNewSize
年轻一代的最大值(for 1.3/1.4 )。
-XX:PermSize
设定“永久”初始值
物理内存的64分之一
-XX:MaxPermSize
设置永久最大值
物理内存的四分之一
-Xss
每个线程的堆栈大小
从JDK5.0开始,每个线程的堆栈大小为1米,以前线程堆栈大小为256K。 调整更具应用性的线程所需的内存大小。 在同一物理内存下,减小该值可以生成更多的线程。 但是,操作系统对一个进程中的线程数有限制,不能无限生成。 经验值在3000~5000左右
对于一般较小的APP应用程序,如果堆栈不是很深,则128k应该足够大的APP应用程序建议使用256k。 此选项对性能有很大影响,需要进行严格的测试。 校长。
与“threadstacksize”选项的说明非常类似,但似乎未在官方文档中说明。 在论坛上,有这样一句话。 ”
- xssistranslatedinavmflagnamedthreadstacksize "
一般设定这个值就可以了。
- xx :热堆叠大小
热堆叠大小
(0meansusedefaultstacksize ([ SPARC :512; solarisx 863360320 (was 256 priorin 5.0 and earlier; SPARC 64位: 1024 Linux amd 6433601024 (was0in 5.0 and earlier ); all others 0.]
-XX:NewRatio
年轻一代(包括腐朽的鸟和两个Survivor区);与老年一代的比较);不包括永久一代) ) ) ) ) ) ) )。
-XX:NewRatio=4表示年轻一代与老一代的比率为1:4,年轻一代占整个堆栈的1/5
如果Xms=Xmx设置了Xmn,则无需设置此参数。
-XX:SurvivorRatio
腐朽飞鸟区和Survivor区大小之比
如果设置为8,则两个Survivor区和一个腐朽飞鸟区的比率为2:8,一个Survivor区占整个年轻一代的1/10
-XX:LargePageSizeInBytes
内存页面的大小不能太大。 影响Perm的大小
=128m
- xx :用户界面访问sorm
ethods原始类型的快速优化
-XX:+DisableExplicitGC
关闭System.gc()
这个参数需要严格的测试
-XX:MaxTenuringThreshold
垃圾最大年龄
如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代. 对于年老代比较多的应用,可以提高效率.如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活 时间,增加在年轻代即被回收的概率
该参数只有在串行GC时才有效.
-XX:+AggressiveOpts
加快编译
-XX:+UseBiasedLocking
锁机制的性能改善
-Xnoclassgc
禁用垃圾回收
-XX:SoftRefLRUPolicyMSPerMB
每兆堆空闲空间中SoftReference的存活时间
1s
softly reachable objects will remain alive for some amount of time after the last time they were referenced. The default value is one second of lifetime per free megabyte in the heap
-XX:PretenureSizeThreshold
对象超过多大是直接在旧生代分配
0
单位字节 zrdyc代采用Parallel Scavenge GC时无效
另一种直接在旧生代分配的情况是大的数组对象,且数组中无外部引用对象.
-XX:TLABWasteTargetPercent
TLAB占eden区的百分比
1%
-XX:+CollectGen0First
FullGC时是否先YGC
false
并行收集器相关参数
-XX:+UseParallelGC
Full GC采用parallel MSC
(此项待验证)
选择垃圾收集器为并行收集器.此配置仅对年轻代有效.即上述配置下,年轻代使用并发收集,而年老代仍旧使用串行收集.(此项待验证)
-XX:+UseParNewGC
设置年轻代为并行收集
可与CMS收集同时使用
JDK5.0以上,JVM会根据系统配置自行设置,所以无需再设置此值
-XX:ParallelGCThreads
并行收集器的线程数
此值最好配置与处理器数目相等 同样适用于CMS
-XX:+UseParallelOldGC
年老代垃圾收集方式为并行收集(Parallel Compacting)
这个是JAVA 6出现的参数选项
-XX:MaxGCPauseMillis
每次年轻代垃圾回收的最长时间(最大暂停时间)
如果无法满足此时间,JVM会自动调整年轻代大小,以满足此值.
-XX:+UseAdaptiveSizePolicy
自动选择年轻代区大小和相应的Survivor区比例
设置此选项后,并行收集器会自动选择年轻代区大小和相应的Survivor区比例,以达到目标系统规定的最低相应时间或者收集频率等,此值建议使用并行收集器时,一直打开.
-XX:GCTimeRatio
设置垃圾回收时间占程序运行时间的百分比
公式为1/(1+n)
-XX:+ScavengeBeforeFullGC
Full GC前调用YGC
true
Do young generation GC prior to a full GC. (Introduced in 1.4.1.)