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消耗更大的内存

  • 相关阅读:
    Qt自定义控件
    Qt布局的简单介绍
    Qt-ui的简单使用,常用控件(2)
    Qt--ui的简单使用(1)
    走向微信api开发
    一文一项目, 代码分析篇
    关于重写一些曾经写的东西
    最近发现一个数据库,好像可以用,于是做了一个调查,把一般常用的和可能踩的坑都查了一下方法,记录了一下,以后可以使用.
    号外一下
    抄来的,占个位儿【百度架构师是怎样搭建MySQL分布式集群】
  • 原文地址:https://www.cnblogs.com/tulingxueyuan/p/14165051.html
Copyright © 2011-2022 走看看