我正在Java 5上编写一个客户端Swing应用程序(图形字体设计器).最近,我遇到了错误,因为我对内存使用情况并不保守.用户可以打开无限数量的文件,程序将打开的对象保存在内存中.经过快速研究后,我在5.0 Java虚拟机中找到了人体工程学,其他人在Windows机器上说JVM默认最大堆大小为.java.lang.OutOfMemoryError: Java heap space64MB
鉴于这种情况,我该如何处理这种约束?
我可以使用java的命令行选项增加最大堆大小,但这需要找出可用的RAM并编写一些启动程序或脚本.此外,增加到一些有限的最大值并不能最终摆脱这个问题.
我可以重写我的一些代码来经常将对象持久化到文件系统(使用数据库是一回事)来释放内存.它可以工作,但它可能也很重要.
如果您可以向我指出上述想法的细节或某些替代方案,如自动虚拟内存,动态扩展堆大小,这将是很好的.
将字符串(以char*形式给出)解析为int的C++方式是什么?强大而清晰的错误处理是一个优点(而不是返回零).
如果我有一个集合c型的T,有一个属性p上T(类型P,说的),什么是做一个最好的办法地图通过提取键?
val c: Collection[T]
val m: Map[P, T]
Run Code Online (Sandbox Code Playgroud)
一种方法如下:
m = new HashMap[P, T]
c foreach { t => m add (t.getP, t) }
Run Code Online (Sandbox Code Playgroud)
但现在我需要一个可变的地图.有没有更好的方法来做到这一点,以便它在一行,我最终得到一个不可变的地图?(显然我可以将上面的内容变成一个简单的库实用程序,就像在Java中一样,但我怀疑在Scala中没有必要)
在什么情况下我应该使用Array(Buffer)和List(Buffer).我所知道的唯一区别是数组是非变量的,列表是协变的.但是性能和其他一些特性呢?
编辑:根据原始答案重写这个问题
该scala.collection.immutable.Set班是不是在它的类型参数不变性.为什么是这样?
import scala.collection.immutable._
def foo(s: Set[CharSequence]): Unit = {
println(s)
}
def bar(): Unit = {
val s: Set[String] = Set("Hello", "World");
foo(s); //DOES NOT COMPILE, regardless of whether type is declared
//explicitly in the val s declaration
}
Run Code Online (Sandbox Code Playgroud) private[this]object MMMap extends HashMap[A, Set[B]] with MultiMap[A, B]
Run Code Online (Sandbox Code Playgroud)
如何将其转换为不可变?
我可以这样做吗?
[OperationContract]
[WebGet(UriTemplate = "/foo/{id}")]
string GetFoo(int id);
Run Code Online (Sandbox Code Playgroud)
我希望我的服务兼具RESTful服务和RPC风格的SOAP服务.如果可能的话,我想将int保留为int,而不是手工解析.
当我在github上的库上有一个功能请求时,我会
通常情况下,原作者很高兴看到增强功能,他们要么按原样拉动它们,要么在经过一些修改后手动合并它们.
问题是,在我的提交被上游接受之后,我应该如何处理我的fork项目?如果我不打算进一步更新,我应该删除存储库吗?或者,我应该保留它的历史兴趣?
github并不真正指出哪个副本是"权威"存储库,因此我的非活动分叉可能会分散其他人分散查找正确副本的注意力.事实上,我刚收到某人的拉取请求,这也是上游接受的.
scala ×6
.net ×1
arrays ×1
c++ ×1
command-line ×1
covariance ×1
git ×1
github ×1
heap-memory ×1
immutability ×1
java ×1
java-ee ×1
jvm ×1
list ×1
map ×1
mutable ×1
parsing ×1
rest ×1
set ×1
wcf ×1
web-services ×1