java内存调优

java内存组成介绍:堆(Heap)和非堆(Non-heap)内存
简单来说堆就是留给开发人员使用的;非堆就是JVM留给 自己用的
内存调整大小 堆和非堆
调整堆大小 (程序运行内存)
-server -Xms768m -Xmx768m
堆栈配置:
java -Xmx3550m –Xms3550m -Xmn2g -Xss128k
-Xmx3550m:设置JVM最大堆内存为3550M,
(Heap Size 最大不要超过可用物理内存的80%)。
-Xms3550m:设置JVM初始堆内存为3550m。
(此值一般设置与-Xmx相同),以避免每次垃圾回收完成后JVM重新分配内存。
-Xmn2g:设置年轻代大小为2G(-Xmn为1/4的-Xmx值)。
整个JVM内存大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大  
年轻代后,将会减小年老代大小。此值关系到jvm垃圾回收,对系统性能影响较大,Sun官方推荐配置为
整个堆的3/8。
-Xss128k:设置每个线程的堆栈大小。
(JDK 5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K)。
根据应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对
一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。
Heap Size 最大不要超过可用物理内存的80%,一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值
Heap Size +非堆 不能大于物理内存 80%

jvm内存回收知识介绍:
JVM不同的对象的生命周期是不一样的。因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率。
在Java程序运行的过程中,会产生大量的对象,其中有些对象是与业务信息相关,比如Http请求中的Session对象、线程、Socket连接,这类对象跟业务直接挂钩,因此生命周期比较长。但是还有一些对象,主要是程序运行过程中生成的临时变量,这些对象生命周期会比较短,比如:String对象,由于其不变类的特性,系统会产生大量的这些对象,有些对象甚至只用一次即可回收。有的比如连接池共享的需要多次使用。
因此jvm 设计了 分代垃圾回收采用分治的思想,进行代的划分,把不同生命周期的对象放在不同代上,不同代上采用最适合它的垃圾回收方式进行回收。
 
如何分代
虚拟机中的共划分为三个代:年轻代(Young Generation)、年老点(Old Generation)和持久代(Permanent Generation)。
年轻代的目标就是尽可能快速的收集掉那些生命周期短的对象
在年轻代中经历了N次垃圾回收后仍然存活的对象,就会被放到年老代中。因此,可以认为年老代中存放的都是一些生命周期较长的对象。
持久代主要存放的是Java类的类信息,与垃圾收集要收集的Java对象关系不大。年轻代和年老代的划分是对垃圾收集影响比较大的。
由于触发GC(Garbage Collection,垃圾收集,垃圾回收)系统性能有影响
什么情况下触发垃圾回收
由于对象进行了分代处理,因此垃圾回收区域、时间也不一样。GC有两种类型:Scavenge GC和Full GC。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值