JVM内存模型及垃圾收集策略解析

JVM内存模型及垃圾收集策略解析

ID:38198818

大小:202.54 KB

页数:20页

时间:2019-06-07

JVM内存模型及垃圾收集策略解析_第1页
JVM内存模型及垃圾收集策略解析_第2页
JVM内存模型及垃圾收集策略解析_第3页
JVM内存模型及垃圾收集策略解析_第4页
JVM内存模型及垃圾收集策略解析_第5页
资源描述:

《JVM内存模型及垃圾收集策略解析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、JVM内存模型及垃圾收集策略解析(1)2010-02-2208:58狂放不羁JavaEye 字号:T 

2、 T垃圾收集器策略从20世纪60年代就已经流行起来了,相比于其他编程语言,Java语言是目前使用最多的依赖于垃圾收集器的语言。AD:WOT2015互联网运维与开发者大会热销抢票JVM内存模型是Java的核心技术之一,之前51CTO曾为大家介绍过JVM分代垃圾回收策略的基础概念,现在很多编程语言都引入了类似JavaJVM的内存模型和垃圾收集器的机制,下面我们将主要针对Java中的JVM内存模型及垃圾收

3、集的具体策略进行综合的分析。一JVM内存模型1.1Java栈Java栈是与每一个线程关联的,JVM在创建每一个线程的时候,会分配一定的栈空间给线程。它主要用来存储线程执行过程中的局部变量,方法的返回值,以及方法调用上下文。栈空间随着线程的终止而释放。StackOverflowError:如果在线程执行的过程中,栈空间不够用,那么JVM就会抛出此异常,这种情况一般是死递归造成的。1.2堆Java中堆是由所有的线程共享的一块内存区域,堆用来保存各种JAVA对象,比如数组,线程对象等。1.2.1Genera

4、tionJVM堆一般又可以分为以下三部分:◆PermPerm代主要保存class,method,filed对象,这部门的空间一般不会溢出,除非一次性加载了很多的类,不过在涉及到热部署的应用服务器的时候,有时候会遇到java.lang.OutOfMemoryError:PermGenspace的错误,造成这个错误的很大原因就有可能是每次都重新部署,但是重新部署后,类的class没有被卸载掉,这样就造成了大量的class对象保存在了perm中,这种情况下,一般重新启动应用服务器可以解决问题。◆Tenure

5、dTenured区主要保存生命周期长的对象,一般是一些老的对象,当一些对象在Young复制转移一定的次数以后,对象就会被转移到Tenured区,一般如果系统中用了application级别的缓存,缓存中的对象往往会被转移到这一区间。◆YoungYoung区被划分为三部分,Eden区和两个大小严格相同的Survivor区,其中Survivor区间中,某一时刻只有其中一个是被使用的,另外一个留做垃圾收集时复制对象用,在Young区间变满的时候,minorGC就会将存活的对象移到空闲的Survivor区间中

6、,根据JVM的策略,在经过几次垃圾收集后,任然存活于Survivor的对象将被移动到Tenured区间。1.2.2SizingtheGenerationsJVM提供了相应的参数来对内存大小进行配置。正如上面描述,JVM中堆被分为了3个大的区间,同时JVM也提供了一些选项对Young,Tenured的大小进行控制。◆TotalHeap-Xms:指定了JVM初始启动以后初始化内存-Xmx:指定JVM堆得最大内存,在JVM启动以后,会分配-Xmx参数指定大小的内存给JVM,但是不一定全部使用,JVM会根据-

7、Xms参数来调节真正用于JVM的内存-Xmx-Xms之差就是三个Virtual空间的大小◆YoungGeneration-XX:NewRatio=8意味着tenured和young的比值8:1,这样eden+2*survivor=1/9堆内存-XX:SurvivorRatio=32意味着eden和一个survivor的比值是32:1,这样一个Survivor就占Young区的1/34.-Xmn参数设置了年轻代的大小◆PermGeneration-XX:PermSize=16M-XX:MaxPermSi

8、ze=64MThreadStack-XX:Xss=128K1.3堆栈分离的好处呵呵,其它的先不说了,就来说说面向对象的设计吧,当然除了面向对象的设计带来的维护性,复用性和扩展性方面的好处外,我们看看面向对象如何巧妙的利用了堆栈分离。如果从JAVA内存模型的角度去理解面向对象的设计,我们就会发现对象它完美的表示了堆和栈,对象的数据放在堆中,而我们编写的那些方法一般都是运行在栈中,因此面向对象的设计是一种非常完美的设计方式,它完美的统一了数据存储和运行。二JAVA垃圾收集器2.1垃圾收集简史垃圾收集提供了

9、内存管理的机制,使得应用程序不需要在关注内存如何释放,内存用完后,垃圾收集会进行收集,这样就减轻了因为人为的管理内存而造成的错误,比如在C++语言里,出现内存泄露时很常见的。Java语言是目前使用最多的依赖于垃圾收集器的语言,但是垃圾收集器策略从20世纪60年代就已经流行起来了,比如Smalltalk,Eiffel等编程语言也集成了垃圾收集器的机制。2.2常见的垃圾收集策略所有的垃圾收集算法都面临同一个问题,那就是找出应用程序不可到达的内存块,将其释放,

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。