JAVA缓存应用

上传人:痛*** 文档编号:244228325 上传时间:2024-10-03 格式:PPT 页数:48 大小:975.50KB
返回 下载 相关 举报
JAVA缓存应用_第1页
第1页 / 共48页
JAVA缓存应用_第2页
第2页 / 共48页
JAVA缓存应用_第3页
第3页 / 共48页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,JAVA,缓存体系及应用,2010.10.27,目录,带着问题来,带着答案走,JAVA,内存体系介绍,基本缓存的使用,缓存框架的介绍,内存溢出状况分析,内存检查工具的使用,问题,JVM,内存的分配原理?,JVM,启动的时候如何正确的设置内存参数?,JVM,内存是不是越大越好,?,什么情况下大家用到了缓存处理,很好的解决了问题,?,缓存框架帮我们解决哪些问题,为什么要使用缓存框架?,你是如何进行内存溢出检查的?,JAVA,内存体系介绍,操作系统的内存使用和管理,JVM,内存的分类,JVM,内存参数设置及作用,垃圾回收机制,内存实时状态查询,操作系统的内存使用和管理,Windows,内存使用,虚拟内存是,Windows,管理所有可用内存的方式。,Windows 32,位为每个进程分配了,4G,的虚拟地址空间,(,用于表示该进程有这么多的空间可用,),,,4G,是由于操作系统,+CPU,是,32,位的,寻址空间就只有,2,的,32,次方,因此得出,4G,的存储空间。,Windows,操作系统默认会给程序和系统预留,2G,的内存寻址空间;我们可以通过配置将应用程序的最大内存配置到,3G,。,4G,配置 但电脑显示最多,3.5,内存。因为:,xp,/vista 32bit,在安装,4G,内存后会分配其中部分内存作为设备保留的内存地址。,64,位就不存在,4GB,空间的束缚了。,Application 2GB,用于程序存放代码,数据,堆栈,自由存储区,Windows System 2GB,共享内存,所有进程都用到的内存区域,操作系统规定:一个应用程序所能承载的最大寻址内存是,2GB(,可以通过配置改变到,3GB),,因为主要是为了预留一部分给操作系统使用,叫做共享内存区。,所以虽然一个程序理论上可以访问,4GB,内存,但是实际上只能分配,2GB,的空间。,所以我们可以得出,2,个程序的最大使用内存是:,2G(,共享内存,)+2*2G(,程序内存,)=6G,为什么我的电脑是,2G,内存,但是在系统可以使用超过,2G,的内存空间,大概有,4G,!,页面文件,以上情况是由于页面文件控制的。,这里很容易混淆一个概念,认为以上,windows,磁盘用来充当内存的叫做虚拟内存,其实,windows,管理的内存都叫做虚拟内存。所以虚拟内存是:,RAM(,物理内存,)+,页面文件,(,磁盘内存,),页面文件即当内存不够时系统会拿出一部分硬盘空间来充当内存使用,当内存占用完时,电脑就会自动调用硬盘来充当内存,以缓解内存的紧张。比如:你的机器有,2G,内存,当使用的内存超过,2G,时,超过的部分就会将硬盘上的文件映射成内存来使用。,按照这样逻辑我们不难得出只要虚拟内存够大,我们就可以无限制的使用,不过考虑到性能这也是不切实际的。,以上只是很浅显的一个理解,其实,Windows,虚拟内存的管理是一个比较复杂的处理过程,由于,windows,的多任务机制,再配合虚拟内存,其实,windows,运行的程序所占用的内存是远远超过可分配内存的。,应用程序,1,内存,磁盘,1,激活应用程序,2,分配相应的内存,3,4,回收内存,5,将内存内容映射到页面文件,并重新建立映射,最小化应用程序,6,7,关闭应用程序,释放虚拟内存,应用程序,2,8,9,切换应用程序,2,读取页面文件放到物理内存中,并重新建立映射,10,操作系统来调度,当物理内存吃紧的情况下,会产生大量的页入,页出动作,从而降低系统运行速度,3-5,:表示页入动作,8-10,:表示页出动作,再来看看任务管理器,总数:,RAM,物理内存总大小,可用数:当前,RAM,内存还剩余多少,系统缓存:指的是系统共享内存使用量,提交更改,(,前面的,),:,实际是虚拟内存使用量,包括,RAM,和页面文件,提交更改,(,后面的,),:,虚拟内存的总量总,RAM+,总的页面文件,进程内存使用量,该数据指的是程序独占,RAM,内存和使用到的系统共享内存因为有共享成分在里面,所以所有程序内存加起来不一定等于系统,RAM,使用的总量。,虚拟内存大小,指的是程序所用到的所有,2G,虚拟内存的寻址空间大小,一般会包含在,RAM,、页面文件、,exe,和,dll,中。,关于,Linux,的内存管理,Windows,管理内存更加规范和统一,通过统一的内存映射和跟踪机制来完成,但是同时也失去了一定的灵活性。,Linux,管理内存不是很规范,省去了内存映射,而是直接将内存提交到页面,并且只有当页面被真正使用了,才会将其绑定到内存中中。,JVM,内存分类,系统级内存分配,JVM,的内存分配机制其实也是基于操作系统分配机制,JVM,最大的内存在,win32,下是,2G,JVM,的内存使用情况实际被分为:,JVM,虚拟机、,JAVA,程序的字节码,(classes),、系统内存空间,Native Heap(,主要用于存放线程和一些系统级的对象和操作,),、,JAVA,内存,Java Heap(,真正的存放,Java Object,的内存区域,),Application 2GB,用于程序存放代码,数据,堆栈,自由存储区,Windows System 2GB,共享内存,所有进程都用到的内存区域,Jvm,Permanet,Native Heap,Java Heap,System lib,JAVA,程序本身使用的内存区域,存放线程、系统变量、一些类似,Runtime,的操作,存放具体的,Classes,、,Jar,信息,注意:所以我们在给,Java,程序分配内存时是分不到,2G,空间的,JNI,的调用,JVM,内存分配管理,JVM,如何管理内存,永久存储区,(Permanent Space),:永久存储区是,JVM,的驻留内存,用于存放,JDK,自身所携带的,Class,Interface,的元数据。,堆空间,(The Heap Space),:,JAVA,对象的出生,成长,死亡都在这个区域完成,;,堆空间又分为养老区和新生区。,新生区,(Young(New)generation space),:新生区的作用包括,JAVA,对象的创建和从,JAVA,对象中筛选出能进入养老区的,JAVA,对象。,伊甸园,(Eden space),:,JAVA,对空间中的所有对象在此出生,该区的名字因此而得名。也即是说当你的,JAVA,程序运行时,需要创建新的对象,,JVM,将在该区为你创建一个指定的对象供程序使用。创建对象的依据即是永久存储区中的元数据。,幸存者,0,区(,Survivor 0 space,)和幸存者,1,区(,Survivor1 space,):当伊甸园的控件用完时,程序又需要创建对象;此时,JVM,的垃圾回收器将对伊甸园区进行垃圾回收,将伊甸园区中的不再被其他对象所引用的对象进行销毁工作。同时将伊甸园中的还有其他对象引用的对象移动到幸存者,0,区。如果,0,区域也没有空间了就会向,1,区移动。,养老区(,Tenure(Old)generation space,):用于保存从新生区筛选出来的,JAVA,对象。,JAVA,所有管理的内存,永久内存区域,(Permanent),:,存放,Classes,、,Jar,等数据,养老区,(Tenured),(,其实可以看作是,”,终极,”,幸存者,),伊甸园区,(,eden,),幸存者区,0(survivor0),From,幸存者区,1(survivor1),To,堆空间,(Java Heap Space),JVM,内存参数设置,Permagnet,(,永久区,),Extend Virtual,(,永久区虚拟内存,),Tenured,(,养老区,),Extend Virtual,(,养老区虚拟内存,),Enden,(,伊甸园,),Survivor0,(,幸存者,0),Survivor0,(,幸存者,1),Extend Virtual,(,幸存者区虚拟内存,),-,XX:MaxPermSize,-,XX:PermSize,-,Xmx,(,最大内存配置,),-,Xms,(,最小内存配置,初始养老区,+,年轻区,),-,XX:MaxNewSize,(,最大年轻区大小,),-,XX:NewSize,(,年轻区大小,),-,XX:SurvivorRatio,(,设置年轻代中,Eden,区与,Survivor,区的大小比值,),-,XX:NewRatio,(,设置年轻代(包括,Eden,和两个,Survivor,区)与年老代的比值,),Permagnent,空间,Java Heap Space,空间,垃圾回收机制,首先当启动,J2EE,应用服务器时,,JVM,随之启动,并将,JDK,的类和接口,应用服务器运行时需要的类和接口以及,J2EE,应用的类和接口定义文件也及 编译后的,Class,文件或,JAR,包中的,Class,文件装载到,JVM,的永久存储区。在伊甸园中创建,JVM,,应用服务器运行时必须的,JAVA,对象,创建,J2EE,应用启动时必须创建的,JAVA,对象;,J2EE,应用启动完毕,可对外提供服务。,JVM,在伊甸园区根据用户的每次请求创建相应的,JAVA,对象,当伊甸园的空间不足以用来创建新,JAVA,对象的时候,,JVM,的垃圾回收器执行对伊甸园区的垃 圾回收工作,销毁那些不再被其他对象引用的,JAVA,对象(如果该对象仅仅被一个没有其他对象引用的对象引用的话,此对象也被归为没有存在的必要,依此类 推),并将那些被其他对象所引用的,JAVA,对象移动到幸存者,0,区。如果幸存者,0,区有足够控件存放则直接放到幸存者,0,区;如果幸存者,0,区没有足够空间存放,则,JVM,的垃圾回收器执行对幸存者,0,区的垃圾回收工作,销毁那些不 再被其他对象引用的,JAVA,对象(如果该对象仅仅被一个没有其他对象引用的对象引用的话,此对象也被归为没有存在的必要,依此类推),并将那些被其他对象 所引用的,JAVA,对象移动到幸存者,1,区。如果幸存者,1,区有足够控件存放则直接放到幸存者,1,区;如果幸存者,0,区没有足够空间存放,则,JVM,的垃圾回收器执行对幸存者,0,区的垃圾回收工作,销毁那些不 再被其他对象引用的,JAVA,对象(如果该对象仅仅被一个没有其他对象引用的对象引用的话,此对象也被归为没有存在的必要,依此类推),并将那些被其他对象 所引用的,JAVA,对象移动到养老区。如果养老区有足够控件存放则直接放到养老区;如果养老区没有足够空间存放,则,JVM,的垃圾回收器执行对养老区区的垃圾回收工作,销毁那些不再被其他对象引 用的,JAVA,对象(如果该对象仅仅被一个没有其他对象引用的对象引用的话,此对象也被归为没有存在的必要,依此类推),并保留那些被其他对象所引用的,JAVA,对象。如果到最后养老区,幸存者,1,区,幸存者,0,区和伊甸园区都没有空间的话,则,JVM,会报告“,JVM,堆空间溢出(,java.lang.OutOfMemoryError,:Java heap space,)”,也即是在堆空间没有空间来创建对象。这就是,JVM,的内存分区管理,相比不分区来说;一般情况下,垃圾回收的速度要快很多;因为在没有必要的时候不用扫描整片内存而节省了大量时间。,通常大家还会遇到另外一种内存溢出错误“永久存储区溢出(,java.lang.OutOfMemoryError,:Java Permanent Space,)”。,System.gc,();,其实并不一定立即触发垃圾回收。只是告诉系统现在该进行垃圾回收了。,JVM,的垃圾回收一种自动的处理机制。,垃圾回收太频繁会对系统造成一定的压力,因为要遍历所有的内存区域。,基本缓存的使用,为什么使用缓存,JAVA,集合类的应用,(,HashMap,),JAVA,单例,为什么使用缓存,大量的数据库,IO,操作;例如:循环获取一个用户信息,从缓存中读取则能提交几十倍至上百
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!