zoukankan      html  css  js  c++  java
  • java高级架构师教程-64位操作系统如何进行JVM调优?

    图灵学院   java高级架构师教程-64位操作系统如何进行JVM调优?

     我们知道,如果JVM中的堆内存太小,则会频繁发生垃圾回收,并且垃圾回收将伴随不同程度的程序暂停。因此,如果扩展堆内存,则可以减少垃圾回收的频率,从而避免程序暂停。

        因此,人们自然会想到扩展存储容量。从理论上讲,一个32位操作系统最多只能支持4G内存,而一个64位操作系统最多可以支持128G内存。因此,我们可以使用64位操作系统,使用64位JVM,并为JVM分配更大的堆内存。但是问题也随之而来。

    JVM性能调优

        在堆内存变大之后,尽管减少了垃圾回收的频率,但是每次垃圾回收的时间却变长了。如果内存为14G,则每个FullGC将持续数十秒。如果FullGC频繁发生,则对于网站来说是无法忍受的。

        因此,对于使用大内存的程序来说,一定要减少FullGC的频率,如果每天只有一两次FullGC,而且发生在半夜,那完全可以接受。

        要减少FullGC的频率,就要尽量避免太多对象进入老年代,可以有以下做法:

        确保对象都是“朝生夕死”的

        一个对象使用完后应尽快让他失效,然后尽快在新生代中被MinorGC回收掉,尽量避免对象在新生代中停留太长时间。

        提高大对象直接进入老年代的门槛

        通过设置参数-XX:PretrnureSizeThreshold来增加大对象的阈值,请尝试让这些对象先进入年轻一代,然后由MinorGC尽快回收,而不是直接进入旧一代。

        注意:使用64位JDK的注意点

        64位JDK支持更大的堆内存,但更大的堆内存会导致一次垃圾回收时间过长。

        现阶段,64位JDK的性能普遍比32位JDK低。

        堆内存过大无法在发生内存溢出时生成内存快照

        若将堆内存设为10G,那么当堆内存溢出时就要生成10G的大文件,这基本上是不可能的。

        相同程序,64位JDK要比32位JDK消耗更大的内存

  • 相关阅读:
    asking邱宝裕
    一文深度解读量化交易(下)
    一文深度解读量化交易(上)
    关于日内波段交易系统:一个期货高手的交易思路独白
    财务报表分析(张新民教授)-第一章笔记
    定增游戏(二)
    leetcode -- Restore IP Addresses
    leetcode -- Minimum Window Substring
    leetcode -- Maximal Rectangle TODO O(N)
    leetcode -- Unique Binary Search Trees II
  • 原文地址:https://www.cnblogs.com/tulingxueyuan/p/14165051.html
Copyright © 2011-2022 走看看