阿里面试需了解

于Hibernate这类ORM而言,的尤重要,是持久性能提升的关键.简单来讲Hibernate就是JDBC行封装,以实现内状态的管理,OR系的映射等,但带来的就是访问效率的降低,和性能的下降,而存就是弥补这一缺点的重要方法.

    
存就是库数据在存中的临时容器,包括库数据在存中的临时,位于库与数库访问层.ORM查询数首先根据自身的存管理策略,在存中找相关数据,如发现所需的据,直接据作为结果加以利用,而避免了库调用性能的开销.而相对内存操作而言,库调用是一代价高程.

    一般
来讲ORM中的存分以下几:

        1.
务级缓存:即在前事围内存.就Hibernate来讲,务级缓存是基于Session的生命周期实现的,每Session存在一个数存,它随着Session的建而存在,着Session的毁而亡,因此也称为Session Level Cache.

        2.
级缓存:即在某个应用中或用中某个独库访问子集中的共享存,此存可由多共享(用事),存共享策略与应用的事隔离机制密切相.在Hibernate中,级缓存由SessionFactory实现,所有由一SessionFactory建的Session例共享此存,因此也称为SessionFactory Level Cache.

        3.分布式存:即在多个应例,多JVM共享的存策略.分布式存由多个应级缓成,通种远程机制(RMI,JMS)实现个缓据同步,任何一个实例的据修改,将导致整集群状态同步.


JVM内存溢出类型

    1、java.lang.OutOfMemoryError:PermGenspace

    JVM管理两种类型的Java内存,堆和非堆。堆是给开发人员用的上面说的就是,是在JVM启动时创建;非堆是留给JVM自己用的,用来存放类的信息的。它和堆不同,运行期内GC不会释放空间。如果webapp用了大量的第三方jar或者应用有太多的class文件而恰好MaxPermSize设置较小,超出了也会导致这块内存的占用过多造成JVM内存溢出,或者tomcat热部署时侯不会清理前面加载的环境,只会将context更改为新部署的,非堆存的内容就会越来越多。

    PermGenspace的全称是PermanentGenerationspace,是指内存的永久保存区域,这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGenspace中,它和存放类实例(Instance)的Heap区域不同,GC(GarbageCollection)不会在主程序运行期对PermGenspace进行清理,所以如果你的应用中有很CLASS的话,就很可能出现PermGenspace错误,这种错误常见在web服务器对JSP进行precompile的时候。如果你的WEBAPP下都用了大量的第三方jar,其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。

    一个最佳的配置例子:(经过本人验证,自从用此配置之后,再未出现过tomcat死掉的情况)

    1.setJAVA_OPTS=-Xms800m

    2.-Xmx800m-XX:PermSize=128M

    3.-XX:MaxNewSize=256m

    4.-XX:MaxPermSize=256m

    2、java.lang.OutOfMemoryError:Javaheapspace

    再来看一下JVM内存溢出的第二种情况,第一种情况是个补充,主要存在问题就是出现在这个情况中。其默认空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4.如果内存剩余不到40%,JVM就会增大堆到Xmx设置的值,内存剩余超过70%,JVM就会减小堆到Xms设置的值。所以服务器的Xmx和Xms设置一般应该设置相同避免每次GC后都要调整虚拟机堆的大小。假设物理内存无限大,那么JVM内存的最大值跟操作系统有关,一般32位机是1.5g到3g之间,而64位的就不会有限制了。

    注意:如果Xms超过了Xmx值,或者堆最大值和非堆最大值的总和超过了物理内存或者操作系统的最大限制都会引起服务器启动不起来。

    垃圾回收GC的角色

    JVM调用GC的频度还是很高的,主要两种情况下进行垃圾回收:

    当应用程序线程空闲;另一个是java内存堆不足时,会不断调用GC,若连续回收都解决不了内存堆不足的问题时,就会报outofmemory错误。因为这个异常根据系统运行环境决定,所以无法预期它何时出现。根据GC的机制,程序的运行会引起系统运行环境的变化,增加GC的触发机会。

    为了避免这些问题,程序的设计和编写就应避免垃圾对象的内存占用和GC的开销。显示调用System.GC()只能建议JVM需要在内存中对垃圾对象进行回收,但不是必须马上回收,一个是并不能解决内存资源耗空的局面,另外也会增加GC的消耗。


拦截器怎么实现自动封装。。

源代码分析。

rowid与rownum区别










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值