小编Gor*_*ley的帖子

为什么Java垃圾收集器在执行不太激进的操作后不久会出现激进的运行?

在使用VisualVM监视java程序时,我注意到垃圾收集器的行为中有一个有趣的模式.看起来很常见,在执行"正常"垃圾收集运行之后,GC会执行第二次,更多的cpu密集运行,这似乎没有额外的影响(更积极的运行之后使用的堆与它是在打火机之后).

我已经在VisualVM的输出上指出了你可以看到垃圾收集器运行和相应的堆使用变化.

有趣的垃圾收集器行为

我的问题基本上是垃圾收集器在这里做什么以及为什么?当有足够的可用内存时,是什么导致它尝试这些真正的cpu密集型运行,并且与较轻的运行相比没有可观察到的好处?或者我是否误解了图表?

该计划的表现并没有真正受到影响,我只是好奇.

java garbage-collection visualvm

8
推荐指数
1
解决办法
282
查看次数

#include'ing .cpp模板实现文件是一种不好的做法吗?

在我正在进行的项目中,我有一个相当大的模板类,我已经实现了这样:

我有我的头文件

// MyBigClass.h
#ifndef MYBIGCLASS_H
#define MYBIGCLASS_H

template <typename T>
class MyBigClass {
   /* -- snip -- */
};

#include "MyBigClass.cpp"
#include "MyBigClass_iterator.cpp"
#include "MyBigClass_complicatedFunctionality_1.cpp"
#include "MyBigClass_complicatedFunctionality_2.cpp"

#endif
Run Code Online (Sandbox Code Playgroud)

然后我的所有实现文件基本上都是这样的:

// MyBigClass_foobar.cpp

template <typename T>
void MyBigClass<T>::member_1(){
   /* -- snip -- */
}

template <typename T>
int MyBigClass<T>::member_2(int foo, T & bar){
   /* -- snip -- */
}

// etc, etc
Run Code Online (Sandbox Code Playgroud)

main.cpp,我只是包括MyBigClass.h,一切正常,编译得很好.我将实现分成多个文件的原因是因为我更喜欢处理三个或四个200-400行文件,而不是一个1200行文件.文件本身在逻辑上是相当有条理的,仅包含嵌套类的实现或一组相互关联的成员函数.

我的问题是,这是完成了吗?前几天我向别人展示时,我得到了一个奇怪的反应,所以我想知道这是不是一种不好的做法,或者是否有更好,更常用的方式来完成这样的事情.

c++ templates build include

2
推荐指数
1
解决办法
1884
查看次数

shared_ptr与矢量

我目前有矢量,如:

vector<MyClass*> MyVector;
Run Code Online (Sandbox Code Playgroud)

我访问使用

MyVector[i]->MyClass_Function();
Run Code Online (Sandbox Code Playgroud)

我想利用shared_ptr.这是否意味着我所要做的就是将我vector改为:

typedef shared_ptr<MyClass*> safe_myclass

vector<safe_myclass>
Run Code Online (Sandbox Code Playgroud)

我可以继续使用我之前的其余代码吗?

c++ boost shared-ptr

1
推荐指数
2
解决办法
3万
查看次数

什么是std :: tr1 :: array <int,16 >>的大小

我想知道如何获得大小std::tr1::array<int, 16> >

它只是16*sizeof(int),这是如何16字节?

c++ sizeof

1
推荐指数
1
解决办法
113
查看次数

C++:默认参数和向量

在C++中,我想要一个带有vector类型的可选参数的函数.如果没有提供参数,我希望变量的大小为0.我目前有

void v_connect::import(vector<int> vid_,vector<double> vpos_,vector<int> vbd_,vector<int>    bd_ss_=std::vector<int>() )
Run Code Online (Sandbox Code Playgroud)

但这不起作用.基本上,如果用户提供可选参数,bd_ss_我想进行检查bd_ss_.size()!=0,然后做一些额外的事情.如果用户没有提供参数,我想要bd_ss.size()==0.这可能吗?

c++ function vector optional-parameters

0
推荐指数
1
解决办法
1019
查看次数