如何使用java旋律自动执行垃圾收集执行?

时间:2016-09-28 09:30:40

标签: garbage-collection java-melody

我使用java melody监视生产环境中的内存使用情况。 要求是内存不应超过<?php /** * @package be * @copyright Copyright (c) 2010-2015 MeigeeTeam. (http://www.meigeeteam.com) */ $meigeeOptions = $this->getLayout(); $lightBox = $meigeeOptions->getMConfigResultByAlias('lightbox_listing'); $timerStatus = $meigeeOptions->getMConfigResultByAlias('timer_status'); $timerListingStatus = $meigeeOptions->getMConfigResultByAlias('timer_listing_status'); $catalogModeWrapper = $meigeeOptions->getMConfigResultByAlias('catalog_mode'); $catalogMode = $catalogModeWrapper['value']['sv2']['value']; ?> <?php if (($_products = $this->getProductCollection()) && $_products->getSize()): ?> <div class="row"> <div class="widget widget-new-products clearfix"> <div class="col-xs-12"> <header class="widget-title"> <h2><?php echo $this->__('New Products') ?></h2> </header> </div> <div class="widget-products col-xs-12"> <?php echo $this->getPagerHtml() ?> <div class="row"> <ul class="products-grid clearfix"> <?php $i=0; foreach ($_products->getItems() as $_product): ?> <li class="item col-xs-6 col-sm-3"> <div class="image-box"> <?php if($lightBox){ ?> <a href="<?php echo $_product->getProductMediaResized(930, 'small_image')->getImageSrc(); ?>" data-toggle="lightbox" class="lightbox-button" data-footer="<?php echo $this->stripTags($_product->getName(), null, true) ?>" title="<?php echo $this->__('Lightbox'); ?>"> <i class="icon-search"></i> </a> <?php } ?> <?php echo $this->getLayout()->createBlock('page/html')->setProductInfo($_product)->setTemplate('catalog/product/product_labels.phtml')->toHtml(); ?> <a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->stripTags($_product->getName(), null, true) ?>" class="product-image"> <span class="mask"></span> <?php echo $_product->productHoverImage($this, 800); $escaped_label = $this->stripTags($_product->getName(), null, true); echo '<img '. $_product->getProductMediaResized(800, 'small_image') ->addImageHtmlAttributte('alt', $escaped_label) ->addImageHtmlAttributte('title', $escaped_label) ->getImageHtmlAttributte().' />'; ?> </a> <div class="actions clearfix"> <?php if ($_product->isSaleable()): ?> <?php if($catalogMode == 0) { ?> <button type="button" title="<?php echo Mage::helper('core')->quoteEscape($this->__('Add to Cart')); ?>" class="btn btn-default pull-left" onclick="setLocation('<?php echo $this->getAddToCartUrl($_product) ?>')"><span><span><i class="icon-basket"></i></span></span></button> <?php } ?> <?php else: ?> <a class="btn btn-default" href="<?php echo $_product->getProductUrl() ?>" title="<?php echo Mage::helper('core')->quoteEscape($this->__('Read More')); ?>"><i class="icon-link"></i></a> <?php endif; ?> <?php if ($this->helper('wishlist')->isAllow()) : ?> <span class="link-wishlist-wrapper"><a href="<?php echo $this->getAddToWishlistUrl($_product) ?>" class="link-wishlist" title="<?php echo $this->__('Add to Wishlist'); ?>"><i class="icon-heart-fa"></i></a></span> <?php endif; ?> <?php if($_compareUrl=$this->getAddToCompareUrl($_product)): ?> <span class="link-compare-wrapper"><a href="<?php echo $_compareUrl ?>" class="link-compare" title="<?php echo $this->__('Add to Compare'); ?>"><i class="icon-shuffle"></i></a></span> <?php endif; ?> </div> </div> <h3 class="product-name"><a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->stripTags($_product->getName(), null, true) ?>)"><?php echo $this->helper('catalog/output')->productAttribute($_product, $_product->getName() , 'name') ?></a></h3> <?php if($_product->isSaleable()): ?> <p class="availability in-stock"><i class="icon-record"></i><?php echo $this->__('Product') ?> <span><?php echo $this->__('In stock') ?></span></p> <?php else: ?> <p class="availability out-of-stock"><i class="icon-record"></i><?php echo $this->__('Product') ?> <span><?php echo $this->__('Out of stock') ?></span></p> <?php endif; ?> <?php echo $this->getReviewsSummaryHtml($_product, 'short') ?> <?php echo $this->getPriceHtml($_product, true, '-new') ?> <?php if($timerStatus && $timerListingStatus) { echo $this->getLayout()->createBlock('page/html')->setProduct($_product)->setTemplate('catalog/product/listing_timer.phtml')->toHtml(); } ?> <hr class="indent-18 white-space"/> </li> <?php endforeach; ?> </ul> </div> </div> </div> </div> <?php endif; ?>

我已经完成了最大化的代码优化但仍然使用256MB/512MB但是当我手动执行java melody中的垃圾收集器时,内存消耗为448MB/512MB

2 个答案:

答案 0 :(得分:0)

为什么你真的关心堆使用?只要你设置XMS(最大堆)你就可以了。让java在适合的时候调用GC。只要你有自由堆就没有意义,只是为了拥有大量的空闲堆来进行GC和释放堆。

如果要限制进程分配的内存XMX是不够的。您还应该限制本机内存。

你应该关心的是

  • 内存泄漏,连续完整GC,GC饥饿
  • GC KPI:延迟,吞吐量,占地面积
  • GC KPI:延迟,吞吐量,占地面积
  • 对象创建率,促销率,回收率......
  • GC暂停时间统计:持续时间分布,平均值,计数,平均间隔,最小值/最大值,标准差
  • GC导致统计:持续时间,百分比,最小/最大,总数
  • GC阶段相关统计:每个GC算法都有几个子阶段。 G1的示例:初始标记,备注,年轻,完整,并发标记,混合

有关更多技术详情,请参阅https://blog.gceasy.io/2017/05/30/improving-your-performance-reports/ https://blog.gceasy.io/2017/05/31/gc-log-analysis-use-cases/。您还可以使用https://blog.gceasy.io/分析GC日志,它将帮助您了解JVM如何使用内存。

答案 1 :(得分:0)

您可以在代码中使用这两个调用之一来调用垃圾回收(等效):

  • System.gc();
  • Runtime.getRuntime().gc();

最好将调用放在定期调用的Runnable中,具体取决于达到内存限制的速度。