草庐IT

gc_maxlifetime

全部标签

c++ - RAII 什么时候比 GC 更有优势?

考虑这个在C++中演示RAII的简单类(从我的脑海中):classX{public:X(){fp=fopen("whatever","r");if(fp==NULL)throwsome_exception();}~X(){if(fclose(fp)!=0){//Anerror.Nowwhat?}}private:FILE*fp;X(Xconst&)=delete;X(X&&)=delete;X&operator=(Xconst&)=delete;X&operator=(X&&)=delete;}我不能在析构函数中抛出异常。我有一个错误,但没有办法报告它。这个例子非常通用:我不仅可以使用

c# - GC 与 C# 和 C++ 在同一解决方案中

我有一个由多个C#项目组成的解决方案。它是用C#编写的,以便快速运行。垃圾收集开始成为一个问题——我们发现我们希望避免大约100毫秒的延迟。一个想法是用C++重新编写它,一个项目一个项目。但是如果将C#与非托管C++结合起来,C++项目中的线程是否也会被垃圾回收卡住?更新感谢您的回复。事实上,这是一个100毫秒可能很重要的应用程序。用C#构建它可能是一个糟糕的决定,但它必须在当时快速启动并运行。现在,我们正在使用Windows的MultimediaTimers每5毫秒触发一次事件。我们确实看到了大约100多毫秒的间隔,并且我们通过检查GC计数器确认这些间隔总是在收集期间发生。优化开启;

c++ - C++ 有垃圾收集器(GC)吗?

我目前正在阅读一篇未发表的硕士论文报告,我将提供反馈。在报告中,他们提到了原生C++和托管C++下的垃圾收集器。我以为C++没有任何标准的GC,我是对还是错?(他们没有提到Boehm-Demers-Weiser。)他们在某些条件下无法正常工作。他们在一个线程中创建对象,然后从另一个线程中删除指针。 最佳答案 NativeC++默认没有这样的东西(最接近的东西是智能指针,但这仍然是完全不同的东西),但这并不妨碍你编写自己的垃圾收集解决方案(或使用thirdpartysolution)。托管C++(及其后续C++/CLI)当然对托管资源

node.js - nodejs v8内存gc分配失败

我正在尝试使用无操作服务器来分析nodejsv8内存。我使用node-memwatch来获取堆差异。我在连接之前和连接断开之后收集堆信息。我使用了Node内存监视。我从客户端尝试了200个并发连接。这是连接断开后的gc跟踪。谁能帮我理解:1.为什么内存在增加?连接断开后,服务器绝对什么都不做。它不应该假设总是随着垃圾被收集而丢弃吗?2.那些分配失败是什么?我如何真正解释这里的痕迹?15802ms:Mark-sweep8.9(45.0)->8.1(45.0)MB,58ms[allocationfailure][GCinoldspaceforcedbyflags].16144ms:Mark

JVM的三种常见GC:Minor GC、Major GC与Full GC

文章目录JVM的GCJVMGC的种类GC的触发机制年轻代GC(MinorGC)触发机制老年代GC(MajorGC/FullGC)触发机制FullGC触发机制为什么需要把Java堆分代?扩展:分代回收机制的三个假说JVM的GCGC:垃圾回收GC英文全称为GarbageCollection,即垃圾回收。Java中的GC就是对内存的GC。Java的内存管理实际上就是对象的管理,其中包括对象的分配和释放。Java对象的分配,程序员可以通过new关键字,Class的new-Instance方法等来显示的分配;而对象的释放,程序员不能实时的进行释放,这就需要GC来完成。JVMGC的种类JVM常见的GC包括

java - GC 花了三个小时来降低 1.2GB 的堆,可能是什么原因?

在我们的其中一台服务器上,垃圾收集花了将近三个小时来尝试(成功地)降低1.2GB的堆内存。从1.4GB到200MB。在此期间CPU使用率很高,几乎80-100%。可能是什么原因?我们有4台具有相同配置(JVM设置、服务器配置、硬件、网络)的此类服务器,假设没有人对其进行任何更改,那么特定服务器运行3小时GC的原因可能是什么。所有其他服务器每次GCActivity只需要5到10分钟。附上一张来自HPBAC的图表,供您引用。显示我认为GC启动的时间,以及GC停止的时间。(正如Stephen指出的更确凿的发现)当服务器管理员回复我时提供这些信息:您所使用的JVM的确切版本使用。(标准Java

java - 如何最小化 GC_FOR_ALLOC 的出现?

我的应用程序导致这些可怕的GC_FOR_ALLOC在特定位置(方法)多次发生:12-2922:20:30.229:D/dalvikvm(10592):GC_FOR_ALLOCfreed1105K,14%free10933K/12615K,paused33ms,total34ms12-2922:20:30.260:D/dalvikvm(10592):GC_FOR_ALLOCfreed337K,13%free11055K/12615K,paused25ms,total26ms12-2922:20:30.288:D/dalvikvm(10592):GC_FOR_ALLOCfreed278K,

java - 如果 JVM 在进行 GC 时不断移动对象,它如何解析引用?

我正在阅读有关JVM调优的文章,我突然想到JVM在执行GC时会不断移动对象。但是Java对象之间存在相互引用,人们会认为这是作为指针实现的,但是JVM不可能在每次移动对象后遍历整个堆,并更新所有引用;这肯定会永远持续下去。那么,如果引用没有改变,但对象的物理位置发生了变化,它如何解析引用呢?我已经阅读了很多关于JVM的文章,但从未在任何地方解释过,甚至没有暗示过。[编辑]我的意思是引用是单向的。从指针指向指向是“瞬时的”,但反过来需要完整的堆扫描。虽然有可能,但似乎不太可能。如果10K对象在一次次要收集中幸存下来,那么进行10K次全堆扫描以更新对这些对象的引用需要多长时间?必须使用某种

java - 什么是类的 GC 根?

在Java中,有称为垃圾收集根(GC根)的特殊对象。它们作为垃圾收集标记机制的根对象(见图)。Thisarticle描述了四种类型的GC根:局部变量活跃的话题静态变量JNI引用还提到:Classesthemselvescanbegarbage-collected.没有收集GC根,因此类本身不是GC根。那么类的GC根是什么? 最佳答案 SowhatareGCrootsfortheclasses?类加载器,有效地-通过其他GC根。如果没有任何东西可以到达类加载器——这意味着没有任何东西可以到达由该类加载器创建的任何类或这些类的任何实例—

java - ParNew gc 会阻止世界吗?

我看到如下GC输出:2010-12-10T16:00:44.942+0800:1443.562:[GC1443.562:[ParNew:201856K->17318K(201856K),0.0352970secs]2113334K->1949037K(4416748K)icms_dc=0,0.0354310secs][Times:user=0.12sys=0.00,real=0.04secs]2010-12-10T16:00:46.207+0800:1444.827:[GC1444.827:[ParNew:196774K->22400K(201856K),0.0119290secs]2