课程咨询 :186 8716 1620      qq:2066486918

昆明Java培训 > 达内新闻 > Java堆的优化技巧
  • Java堆的优化技巧

    发布:昆明Java培训      来源:达内新闻      时间:2015-12-28

  • 程序优化对一个一个程序本身来说是一件很重要的事,一个简单的优化就可以加快运行效率,同时还可以充分利用资源,达内昆明java培训分享一下怎么做堆的优化。

    昆明java培训老师发现许多性能问题都是由Java堆容量不足和调优引起的。下面他将和大家分享非常实用的5个Java堆优化技巧:

    1.JVM:对难以理解的东西产生恐惧感

    千万不要以为,通过配置,调优,就可以排除那些你所不明白的问题。有些人认为Java程序员不需要知道内部JVM内存管理。毫无疑问,这种观点明显是错误的,如果想拓宽知识面和提升排除故障能力,你就必须要了解和学习一下J VM内存管理。

    2.数据和应用程序为王:回顾静态占用需求

    应用程序以及相关数据将决定Java堆空间占用需求。通过静态内存,可“预测”下面的内存需求:

    确定将会有多少不同的应用程序部署到预先计划的一个单独的JVM进程上,例如有多少个ear文件、war文件、jar文件等。在一个JVM上部署的应用程序越多,对本机堆的需求就越多。

    确定有多少个类需要在运行时加载:包括第三方API。越多的类加载器和类在运行时被加载,在HotSpot VM PermGen空间和内部JIT相关优化对象上的需求就越高。

    确定数据缓存占用,如应用程序加载内部缓存数据结构(和第三方API),例如数据库中的数据缓存,从文件中读取数据等。数据缓存使用越多,Java Heap OldGen空间需求就越高。

    确定允许建立的中间件线程数量。这是非常重要的,因为Java线程需要足够的本机内存,否则会抛OutOfMemoryError异常。

    在JVM进程上部署的应用程序越多,对本地内存和PermGen空间的要求就越高。数据缓存并不是序列化为一个磁盘或数据库,它将从OldGen空间里面需要额外的内存。

    设法对静态内存占用进行合理的评估,在真正进行数据测试之前,设置一些JVM能力起点是非常有用的。对于32位JVM,通常不推荐一个Java堆大小超过2 GB(-Xms2048m,-Xmx2048m),对于Java EE应用程序和线程来说这样将需要足够的内存和本机堆PermGen。

    这个评估是非常重要因为太多的应用程序部署在一个32位JVM进程上很容易导致本机堆耗尽;尤其是在多重线程环境。

    对于64位JVM, 一个3GB或者4GB的Java堆/JVM进程是推荐的起点。

    3.业务流量设置规则:审查动态内存占用需求

    业务流量通常会决定动态内存占用。通过观察各种监控工具可以发现并发用户与请求生成的JVM GC“心跳”,这是由于频繁的创建和垃圾回收短期或者长期对象。

    一个典型的32位JVM,Java堆大小设置在2 GB(使用分代&并发收集器)通常为500 MB YoungGen分配空间和1.5 GB的OldGen空间。

    最大限度地减少重大GC收集的频率是获得最佳性能的关键因素,所以在高峰的时候理解和评估需要多少内存是非常重要的。

    再次声明,应用程序类型和数据将决定内存需求。购物车的应用程序类型(长期居住的对象)涉及大型和非序列化会话数据,这个通常需要大型Java堆和很多OldGen空间。无状态和XML处理(很多短命的对象)繁重的应用程序需要适当YoungG en空间,以尽量减少频率主要集合。

    4.量体裁衣

    理解基本的JVM原则和内存空间。

    对所有应用程序有深入的了解及其它们的特点(大小、类型、动态流量、无状态对象VS有状态对象、内部内存缓存等)。

    对预测业务流量(并发用户)给每一个应用程序能提出很好的观点—如果你需要一个64位的虚拟内存,那么将设置哪个作为开始。

    如果需要多个JVM(中间件)过程。

    等一下,这样做并不足够。虽然上面的信息是至关重要的,并且关于Java堆的设置进行了“最佳猜测”,对应用程序的行为进行模拟并且进行适当的分析、负载和性能测试来验证Java堆内存要求。

    Java分析器和堆转储分析工具允许你理解和验证应用程序内存足迹,包含内存泄漏的检测和解决方案。负载测试和性能测试是必不可少的,通过模拟并发用户来验证早期评估是否正确,它也会把应用程序瓶颈暴露出来并且允许你 行微调。推荐一个非常容易上手的工具:Apache Jmeter。

    5.分而治之

    “分而治之”策略包括拆分应用程序流量到多个JVM进程,下面提供一些拆分技巧:

    减少每个JVM进程的Java堆大小(静态和动态的占用)

    降低JVM调优复杂度。

    减少GC流失和暂停每个JVM进程

    增加冗余和故障切换功能

    排列最新的Cloud和IT虚拟化战略

    当你发现已经花费了大量的时间在64位JVM进程调优上,是时候该好好审视一下你的中间件和JVM部署策略并且利用垂直和水平缩放。这条策略的实现需要更多的硬件支持,但是从长远角度来看,是非常有效和有益的。

    优化就是更好地将资源充分利用,同时减少不必要的资源占用,达内昆明java培训希望我们的昆明java培训班学会做好程序的优化,这样才能够更好地让我们程序有效率运行。

    推荐文章

上一篇:Java堆内存的10个要点

下一篇:用JAVA程序取得IP地址

最新开班日期  |  更多

Java--零基础全日制班

Java--零基础全日制班

开班日期:11/30

Java--零基础业余班

Java--零基础业余班

开班日期:11/30

Java--周末提升班

Java--周末提升班

开班日期:11/30

Java--零基础周末班

Java--零基础周末班

开班日期:11/30

  • 网址:http://km .java.tedu.cn      地址:昆明市官渡区春城路62号证券大厦附楼6楼
  • 课程培训电话:186 8716 1620      qq:2066486918    全国服务监督电话:400-827-0010
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内国际公司(TARENA INTERNATIONAL,INC.) 版权所有 京ICP证08000853号-56