我有以下scala文件:
object SGuavaTryout {
com.google.common.cache.CacheBuilder.newBuilder()
}
Run Code Online (Sandbox Code Playgroud)
我在类路径中使用guava-11.0.2.jar进行编译.我的scala 2.9.1编译器(eclipse插件和普通scalac)抱怨:
error while loading CacheBuilder, Missing dependency
'class javax.annotation.CheckReturnValue', required by
D:\devel\eclipse-workspace\Scala Spielwiese\guava-11.0.2.jar
(com/google/common/cache/CacheBuilder.class)
Run Code Online (Sandbox Code Playgroud)
要编译,我需要将jsr305(jsr305-1.3.9.jar)添加到构建路径.没有jsr305的java等价编译就好了:
public class JGuavaTryout {
public void tryout() {
com.google.common.cache.CacheBuilder.newBuilder();
}
}
Run Code Online (Sandbox Code Playgroud)
scala需要jsr305的任何想法?是否有官方的jsr305实现与番石榴一起使用?
谢谢! - 乔治
在Windows 10 / OpenJDK 11.0.4_x64上运行下面的代码会作为输出used: 197
和输出expected usage: 200
。这意味着200个字节数组(一百万个元素)占用了大约。200MB RAM。一切都很好。
当我将代码中的字节数组分配从new byte[1000000]
更改为new byte[1048576]
(即更改为1024 * 1024个元素)时,它会作为输出used: 417
和产生expected usage: 200
。有没有搞错?
import java.io.IOException;
import java.util.ArrayList;
public class Mem {
private static Runtime rt = Runtime.getRuntime();
private static long free() { return rt.maxMemory() - rt.totalMemory() + rt.freeMemory(); }
public static void main(String[] args) throws InterruptedException, IOException {
int blocks = 200;
long initiallyFree = free();
System.out.println("initially free: " + initiallyFree / 1000000);
ArrayList<byte[]> …
Run Code Online (Sandbox Code Playgroud) 在下面的例子中,在第二个中case
我会期望与第一个相同的编译错误case
,但它编译.为什么?
object CaseMatching extends App {
case class Id(value: Long)
object Id { val zero = Id(0) }
case class Name(value: String)
case class IdName(id: Id, name: Name)
IdName(Id(0), Name("A")) match {
case IdName(_, Id(0) ) => // does not compile (as expected)
case IdName(_, Id.zero) => // does compile (but should not ?)
case IdName(Id.zero, _) => println("OK") // this is OK and will match
case _ =>
}
}
Run Code Online (Sandbox Code Playgroud)
为什么相关?- 我花了大部分时间来找出为什么从未遇到过以下情况:case TreeEntry(_, Some(child), …
该scaladoc的Option.tapEach
状态“的回报:因为这同样的逻辑集合”正如预期的名字命名的操作tap
和foreach
。但是,它不返回 anOption
而是Iterable
由 a 支持List
:
scala> import scala.util.chaining._
scala> Option(5).tap(_.foreach(_ => ()))
val res0: Option[Int] = Some(5)
scala> Option(5).tapEach(_ => ())
val res1: Iterable[Int] = List(5)
Run Code Online (Sandbox Code Playgroud)
(已针对 Scala 2.13.5 和 3.0.0-RC1 进行验证)
是否有充分的理由返回Iterable
而不是Option
,或者这只是被忽略了(最终可能会被修复)?
我使用 1 GB Java 堆 ( -Xmx1g
) 将数据存储在许多大型字节数组中。我花了OutOfMemoryError
相当长的时间才存储 1 GB 的数据。此时,根据 Runtime 计算,还有相当多的空闲堆rt.maxMemory() - rt.totalMemory() + rt.freeMemory()
:
字节数组大小 | 约。可存储的数据 | 约。显示空闲堆 |
---|---|---|
2^18 (262144) | 800MB | 270MB |
2^17 (131072) | 930MB | 140MB |
2^16 (65536) | 997MB | 72MB |
2^15 (32768) | 1032MB | 36MB |
为什么大字节数组的堆大小计算关闭,我可以做些什么来修复它吗?
注意:当使用 2^19(或更大)大小的字节数组时,会发生不同的情况:1 MB 或更多的 Java 字节数组占用两倍的 RAM - 让我们将这个问题集中在 2^18 大小的字节数组上。
java -cp .\lib\* -Xmx1g tryit.Main
在 Windows和 Debian上使用 64 位服务器 VM AdoptOpenJDK 11.0.11 运行java -cp .:./lib/* -Xmx1g tryit.Main
:
package tryit;
public class …
Run Code Online (Sandbox Code Playgroud) 在Scala 2.11.5中,编译它
object Tryout {
trait A {
def method(a: Int): Boolean
}
abstract class B extends A {
def method(a: Int) = ???
}
new B {
override def method(a: Int) = true // type mismatch here
}
}
Run Code Online (Sandbox Code Playgroud)
在"真实"处产生"类型不匹配:找到布尔值,需要无效".如果我???
用true或false 替换它,它会编译.如果我在抽象类中指定"方法"的结果类型,它也会编译.
这不是一个大问题.但是我很好奇是否有人可以解释为什么???
没有正确推断为布尔值?
下面,sumAllIf
是尾递归,sumAllFold
不是。但是,sumAllIf
实际上具有相同的实现。这是 Scala 编译器(或 Scala 库)的缺点,还是我忽略了某些东西?
def maybeNext(in: Int): Option[Int] = if in < 10 then Some(in + 1) else None
// The Scala library implements Option.fold like this:
// @inline final def fold[B](ifEmpty: => B)(f: A => B): B =
// if (isEmpty) ifEmpty else f(this.get)
@annotation.tailrec
def sumAllIf(current: Int, until: Int, sum: Int): Int =
val nextOption = maybeNext(current)
if (nextOption.isEmpty) sum else sumAllIf(nextOption.get, until, sum + nextOption.get)
// However, with Scala 3.1.0 …
Run Code Online (Sandbox Code Playgroud) scala ×5
arrays ×2
java ×2
memory ×2
case-class ×1
fold ×1
guava ×1
inheritance ×1
memory-leaks ×1
types ×1