草庐IT

java - 超出 GC 开销限制

JVM用于抛出“java.lang.OutOfMemoryError:GC开销限制超出”的采样时间是多少?我知道您可以使用参数GCTimeLimit和GCHeapFreeLimit控制98%和2%,但是采样时间是多少? 最佳答案 来自JavaSE6HotSpot[tm]VirtualMachineGarbageCollectionTuning以下ExcessiveGCTimeandOutOfMemoryErrorTheconcurrentcollectorwillthrowanOutOfMemoryErroriftoomuchtim

java - Java 强制转换会引入开销吗?为什么?

当我们将一种类型的对象转换为另一种类型时是否有任何开销?还是编译器只是解决所有问题而在运行时没有成本?这是一般情况,还是有不同的情况?例如,假设我们有一个Object[]数组,其中每个元素可能有不同的类型。但是我们总是可以肯定地知道,比如说,元素0是一个Double,元素1是一个字符串。(我知道这是一个错误的设计,但我们假设我必须这样做。)Java的类型信息在运行时是否仍然保留?或者编译后一切都忘记了,如果我们做(Double)elements[0],我们只会跟随指针并将这8个字节解释为double,不管那是什么?我非常不清楚Java中的类型是如何完成的。如果您对书籍或文章有任何建议,

c++ - 与 C++ 中的普通指针相比,智能指针的开销是多少?

与C++11中的普通指针相比,智能指针的开销是多少?换句话说,如果我使用智能指针,我的代码会变慢吗?如果是,会慢多少?具体来说,我问的是C++11std::shared_ptr和std::unique_ptr。很明显,压入堆栈的东西会更大(至少我是这么认为的),因为智能指针还需要存储其内部状态(引用计数等),问题真的是,如果有的话,这会对我的表现产生多大的影响?例如,我从函数返回智能指针而不是普通指针:std::shared_ptrgetValue();//versusconstValue*getValue();或者,例如,当我的一个函数接受智能指针而不是普通指针作为参数时:voids

c++ - 不必要的包含文件是开销吗?

我看到了几个关于如何在C++项目中检测不必要的#include文件的问题。这个问题经常引起我的兴趣,但我一直没有找到满意的答案。如果包含了一些头文件,而这些头文件没有在c++项目中使用,那会是开销吗?我理解这意味着在编译之前,所有头文件的内容都会被复制到包含的源文件中,这会导致很多不必要的编译。这种开销在编译后的目标文件和二进制文件中传播到什么程度?Aren'tcompilersabletodosomeoptimizationstomakesurethatthiskindofoverheadisnottransferredtotheresultingobjectfilesandbina

c++ - 不必要的包含文件是开销吗?

我看到了几个关于如何在C++项目中检测不必要的#include文件的问题。这个问题经常引起我的兴趣,但我一直没有找到满意的答案。如果包含了一些头文件,而这些头文件没有在c++项目中使用,那会是开销吗?我理解这意味着在编译之前,所有头文件的内容都会被复制到包含的源文件中,这会导致很多不必要的编译。这种开销在编译后的目标文件和二进制文件中传播到什么程度?Aren'tcompilersabletodosomeoptimizationstomakesurethatthiskindofoverheadisnottransferredtotheresultingobjectfilesandbina

c++ - 编译时 constexpr 错误,但运行时没有开销

有一个众所周知的技巧可以通过执行以下操作在constexpr函数的评估中导致编译时错误:constexprintf(intx){return(x!=0)?x:throwstd::logic_error("Ohno!");}如果在constexpr上下文中使用该函数,如果x==0则会出现编译时错误。但是,如果f的参数不是constexpr,那么如果x==0,它将在运行时抛出异常,这可能不会出于性能原因总是需要的。类似于assert被NDEBUG保护的理论,有没有办法用constexpr函数导致编译时错误,但在运行时不执行任何操作?最后,C++1y(C++14)中宽松的constexpr规

c++ - 编译时 constexpr 错误,但运行时没有开销

有一个众所周知的技巧可以通过执行以下操作在constexpr函数的评估中导致编译时错误:constexprintf(intx){return(x!=0)?x:throwstd::logic_error("Ohno!");}如果在constexpr上下文中使用该函数,如果x==0则会出现编译时错误。但是,如果f的参数不是constexpr,那么如果x==0,它将在运行时抛出异常,这可能不会出于性能原因总是需要的。类似于assert被NDEBUG保护的理论,有没有办法用constexpr函数导致编译时错误,但在运行时不执行任何操作?最后,C++1y(C++14)中宽松的constexpr规

c++ - 如果 unique_ptr 需要存储删除器,它怎么能没有开销?

首先看看C++Primer说的unique_ptr和shared_ptr:16.1.6美元。效率和灵activeWecanbecertainthatshared_ptrdoesnotholdthedeleterasadirectmember,becausethetypeofthedeleterisn’tknownuntilruntime.Becausethetypeofthedeleterispartofthetypeofaunique_ptr,thetypeofthedeletermemberisknownatcompiletime.Thedeletercanbestoreddire

c++ - 如果 unique_ptr 需要存储删除器,它怎么能没有开销?

首先看看C++Primer说的unique_ptr和shared_ptr:16.1.6美元。效率和灵activeWecanbecertainthatshared_ptrdoesnotholdthedeleterasadirectmember,becausethetypeofthedeleterisn’tknownuntilruntime.Becausethetypeofthedeleterispartofthetypeofaunique_ptr,thetypeofthedeletermemberisknownatcompiletime.Thedeletercanbestoreddire

C++ 异常开销

为什么嵌入式平台开发人员不断尝试从他们的SDKs中移除使用C++异常?例如,BadaSDK为异常使用建议了以下解决方法,它看起来异常很难看:resultMyApp::InitTimer(){resultr=E_SUCCESS;_pTimer=newTimer;r=_pTimer->Construct(*this);if(IsFailed(r)){gotoCATCH;}_pTimer->Start(1000);if(IsFailed(r)){gotoCATCH;}returnr;CATCH:returnr;}这种行为的原因是什么?据我所知,ARM编译器完全支持C++异常,这实际上不是问题