小编zne*_*eak的帖子

为什么调用System.gc()是不好的做法?

回答了关于如何用Java强制释放对象的问题(这个人正在清除一个1.5GB的HashMap)后System.gc(),我被告知System.gc()手动调用是不好的做法,但这些评论并不完全令人信服.此外,似乎没有人敢投票,也没有人回答我的回答.

我被告知这是不好的做法,但后来我也被告知垃圾收集器运行不再系统地停止世界,并且它也可以有效地被JVM用作提示,所以我有点像茫然

我知道JVM在需要回收内存时通常比你知道的要好.我也明白,担心几千字节的数据是愚蠢的.我也明白,甚至数兆字节的数据也不是几年前的数据.但仍然,1.5千兆字节?而且你知道内存中有1.5 GB的数据; 它不像是在黑暗中拍摄.是System.gc()系统性的坏,还是有一点它变得好吗?

所以问题实际上是双重的:

  • 打电话为什么或不是不好的做法System.gc()?它是否仅仅是某些实现中JVM的提示,还是一个完整的收集周期?真的有垃圾收集器实现可以在不停止世界的情况下完成工作吗?请详细说明人们在评论中对我的回答所做的各种断言.
  • 门槛在哪里?打电话是不是一个好主意System.gc(),或者有时候可以接受?如果是这样,那些时候是什么时候?

java garbage-collection

317
推荐指数
7
解决办法
12万
查看次数

在Swift中使用willSet和didSet的目的是什么?

Swift有一个非常类似于C#的属性声明语法:

var foo: Int {
    get { return getFoo() }
    set { setFoo(newValue) }
}
Run Code Online (Sandbox Code Playgroud)

但是,它也有willSetdidSet行动.这些在分别调用setter之前和之后调用.考虑到你可以在setter中使用相同的代码,它们的目的是什么?

callback swift didset property-observer

257
推荐指数
7
解决办法
18万
查看次数

COUNT(*)与COUNT(1)对COUNT(pk):哪个更好?

我经常发现这三种变体:

SELECT COUNT(*) FROM Foo;
SELECT COUNT(1) FROM Foo;
SELECT COUNT(PrimaryKey) FROM Foo;
Run Code Online (Sandbox Code Playgroud)

据我所知,他们都做同样的事情,我发现自己在我的代码库中使用了三个.但是,我不喜欢以不同的方式做同样的事情.我应该坚持哪一个?他们中的任何一个比其他两个更好吗?

sql select count

214
推荐指数
5
解决办法
10万
查看次数

在objective-c中获取NSURL的一部分

我有一个值为的NSString

http://digg.com/news/business/24hr
Run Code Online (Sandbox Code Playgroud)

如何在第3级之前获得所有内容?

http://digg.com/news/
Run Code Online (Sandbox Code Playgroud)

objective-c nsurl nsstring

114
推荐指数
2
解决办法
6万
查看次数

C中一元'+'运算符的目的是什么?

在C中,写下这样的内容是合法的:

int foo = +4;
Run Code Online (Sandbox Code Playgroud)

然而,据我所知道的,一元++4是一个空操作.是吗?

c

74
推荐指数
7
解决办法
2万
查看次数

什么是`int foo ::*bar ::*`?

C++很酷的一点是,它允许您创建指向成员类型的变量.最常见的用例似乎是获取指向方法的指针:

struct foo
{
    int x() { return 5; }
};

int (foo::*ptr)() = &foo::x;
foo myFoo;
cout << (myFoo.*ptr)() << '\n'; // prints "5"
Run Code Online (Sandbox Code Playgroud)

然而,乱搞,我意识到他们也可以指向成员变量:

struct foo
{
    int y;
};

int foo::*ptr = &foo::y;
foo myFoo;
myFoo.*ptr = 5;
cout << myFoo.y << '\n'; // prints "5"
Run Code Online (Sandbox Code Playgroud)

这很漂亮.它引导我进一步实验:如果你能得到指向结构子成员的指针怎么办?

struct foo
{
    int y;
};

struct bar
{
    foo aFoo;
};

int bar::*foo::*ptr;
Run Code Online (Sandbox Code Playgroud)

实际上编译.

但是,我不知道如何分配任何有用的东西.以下都不起作用:

int bar::*foo::*ptr = &bar::foo::y; // no member named "foo" in "bar"
int …
Run Code Online (Sandbox Code Playgroud)

c++ pointer-to-member

69
推荐指数
3
解决办法
4504
查看次数

即时编译与提前编译有什么好处?

我最近一直在考虑这个问题,在我看来,JIT编译的大多数优点应该或多或少地归结为中间格式,并且jints本身并不是生成代码的好方法.

所以这些是我经常听到的主要的JIT编译参数:

  1. 即时编译可实现更高的可移植性.这不是因为中间格式吗?我的意思是,一旦你的虚拟字节码在你的机器上得到它,没有什么能阻止你将它们编译成本机字节码.可移植性是"分发"阶段的问题,而不是"运行"阶段.
  2. 那么,那么在运行时生成代码呢?嗯,同样适用.没有什么可以阻止您将实时编译器集成到您的本机程序中以实现真正的及时需求.
  3. 但运行时只需将其编译为本机代码一次,并将生成的可执行文件存储在硬盘驱动器上某处的某种缓存中.当然可以.但它在时间限制下优化了你的程序,而且从那时起它并没有让它变得更好.见下一段.

它不像提前编译也没有优势.即时编译有时间限制:在程序启动时,您不能让最终用户永远等待,因此需要权衡某些事情.大多数时候他们只是减少优化.我的一个朋友有分析证据表明内联函数和"手动"展开循环(在过程中混淆源代码)对他的C#号码运算程序的性能产生了积极影响; 在我这方面做同样的事情,我的C程序填写相同的任务,没有产生任何积极的结果,我相信这是由于我的编译器允许进行广泛的转换.

然而,我们被jitted程序包围.C#Java无处不在,Python脚本可以编译成某种字节码,我确信其他一些编程语言也是如此.我必须有一个很好的理由让我失踪.那么什么使即时编译如此优于提前编译?


编辑为了清除一些混淆,也许重要的是要声明我全都是可执行文件的中间表示.这有很多优点(实际上,实时编译的大多数参数实际上是中间表示的参数).我的问题是如何将它们编译为本机代码.

大多数运行时(或编译器)都倾向于及时或提前编译它们.由于编译器有更多的时间来执行优化,因此提前编译看起来像是一个更好的替代方案,我想知道为什么微软,Sun和所有其他人都在反过来.我对与分析相关的优化有点怀疑,因为我对即时编译程序的经验表现出很差的基本优化.

我用了一个例子与C语言代码,只是因为我需要的例子名列前茅的时间编制与刚刚在时间编译.C代码没有发送到中间表示的事实与情况无关,因为我只需要表明提前编译可以产生更好的即时结果.

jit compilation

68
推荐指数
4
解决办法
2万
查看次数

什么可以使C++ RTTI不受欢迎?

纵观LLVM文件,他们提到,他们使用"RTTI的自定义窗体",这是他们的原因isa<>,cast<>dyn_cast<>模板功能.

通常,阅读一个库重新实现一种语言的一些基本功能是一种可怕的代码味道,只是邀请运行.但是,这是我们所说的LLVM:这些人正在研究C++编译器 C++运行时.如果他们不知道他们在做什么,我会非常沮丧,因为我更喜欢Mac OS附带clanggcc版本.

尽管如此,由于缺乏经验,我还是想知道正常RTTI的缺陷是什么.我知道它只适用于有v-table的类型,但只提出两个问题:

  • 既然你只需要一个虚拟方法来获得vtable,为什么它们不只是将方法标记为virtual?虚拟析构函数似乎很擅长这一点.
  • 如果他们的解决方案不使用常规RTTI,任何想法如何实现?

c++ rtti llvm

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

foreach会自动调用Dispose吗?

在C#中,foreach是否会在任何实现IDisposable的对象上自动调用Dispose?

http://msdn.microsoft.com/en-us/library/aa664754(v=vs.71).aspx似乎表明它确实:

*否则,集合表达式是一个实现System.IEnumerable的类型,而foreach语句的扩展是:复制

IEnumerator enumerator = 
        ((System.Collections.IEnumerable)(collection)).GetEnumerator();
try {
   while (enumerator.MoveNext()) {
      ElementType element = (ElementType)enumerator.Current;
      statement;
   }
}
finally {
   IDisposable disposable = enumerator as System.IDisposable;
   if (disposable != null) disposable.Dispose();
}
Run Code Online (Sandbox Code Playgroud)

c# foreach idisposable

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

是否可以在不使用<fieldset>标签的情况下实现<fieldset>类效果?

我个人喜欢这个<fieldset>标签,因为它如何绘制一个盒子并将<legend>它放在边框上方.像这样.

我想要实现的示例图像

但是,该fieldset元素用于组织表单,并且将其用于一般设计并不比使用表格进行一般设计更好.所以,我的问题是...... 如何使用另一个标签获得相同的结果?边框必须在<legend>(或任何其他标签将被使用)下删除,并且因为可能存在"复杂的"身体背景图像,所以我不能仅设置background-color图例以匹配元素之一下.

我希望它能在没有JavaScript的情况下工作,但CSS3和基于XML的格式(如SVG或XHTML)都可以.

html css fieldset

51
推荐指数
4
解决办法
3万
查看次数