标准api不包含AtomicBitSet实现.我可以在AtomicIntegerArray之上滚动自己,但也不愿意.
是否有人知道在与Apache 2兼容的许可下发布的现有实现?我只需要基本操作来设置和检查位.
编辑:
代码是性能和内存关键,所以我想尽可能避免同步或每个标志的整数.
我很想知道添加到每个Kotlin类的MetaData注释中包含哪些数据.
但大多数领域都没有提供更多细节
"自定义格式的元数据.不同类型的格式可能不同(甚至不存在)."
https://github.com/JetBrains/kotlin/blob/master/core/runtime.jvm/src/kotlin/Metadata.kt
是否有参考解释如何解释这些数据?
关于Java 8中的流,有大量关于流的信息和教程.我发现的大部分内容都很好地解释了流的各个元素如何在概念层面上工作.但是,我没有遇到过很多材料,这些材料描述了JVM实际上如何实现和执行流.
考虑比较Collection使用流和使用旧学前Java 8方式的操作.底层的Bytecodes在这两种方法之间看起来是否相同?性能是否相同?
为了使这个具体,请考虑以下示例,其中我需要找到名称中包含单词"fish"的所有鱼,然后将每个匹配鱼的第一个字母大写.(是的,我知道Hagfish实际上并不是一条鱼,但是我用完了匹配的鱼名.)
List<String> fishList = Arrays.asList("catfish", "hagfish", "salmon", "tuna", "blowfish");
// Pre Java-8 solution
List<String> hasFishList = new ArrayList<String>();
for (String fish : fishList) {
if (fish.contains("fish")) {
String fishCap = fish.substring(0, 1).toUpperCase() + fish.substring(1);
hasFishList.add(fishCap);
}
}
// Java-8 solution using streams
List<String> hasFishList = fishList.stream()
.filter(f -> f.contains("fish"))
.map(f -> f.substring(0, 1).toUpperCase() + f.substring(1))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
您可能对这两种方法在Bytecode级别下可能有何不同的见解会很有帮助.而一些实际的字节代码会更好.
是否有可能通过Java 1.6 attach api获取加载到当前JVM中的代理列表?如果是这样的话?
在启动时加载的代理可以通过RuntimeMXBean确定,但我找不到一种方法来处理启动后添加的代理.
我刚刚在Eclipse中进行了快速实验.
public class StackTractTest {
static class Nasty {
public Integer toInt() {
if (1 == 1) throw new RuntimeException();
return 1;
}
}
@Test
public void methodReference() {
Stream.of(new Nasty())
.map(Nasty::toInt)
.findFirst();
}
@Test
public void lambda() {
Stream.of(new Nasty())
.map(n -> n.toInt())
.findFirst();
}
}
Run Code Online (Sandbox Code Playgroud)
当方法引用测试失败时,跟踪开始
java.lang.RuntimeException
at com.example.StackTractTest$Nasty.toInt(StackTractTest.java:11)
at com.example.StackTractTest$$Lambda$1/1681433494.apply(Unknown Source)
at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
Run Code Online (Sandbox Code Playgroud)
虽然跟踪的末尾(未显示)确实链接回到具有findFirston的行,但是没有对使用方法引用的行的引用.
而lamdba stacktrace开始了
java.lang.RuntimeException
at com.example.StackTractTest$Nasty.toInt(StackTractTest.java:11)
at com.example.StackTractTest.lambda$0(StackTractTest.java:26)
at com.example.StackTractTest$$Lambda$1/1681433494.apply(Unknown Source)
at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
Run Code Online (Sandbox Code Playgroud)
第26行使用了正确识别lambda的方法.
这是Eclipse编译器的特性还是使用方法引用的一般缺点,在选择它们和lambda时应该考虑这些引用?
Java 7提供了方便的方法
Collections.emptyEnumeration()
但这在Java 6中不可用.
是否有一个空的枚举类潜伏在JDK的其他地方,或者我需要自己滚动吗?
有没有关于Scala编译器如何将各种Scala功能映射到字节码的好文章?
快速谷歌出现了David Pollak 2009年演讲的支持材料
https://github.com/dpp/jvm_summit_2009/blob/master/scala_fancy_pants.pdf
但我怀疑这可能是过时的和不完整的.
我可以尝试通过scalap javap 自己收集这些数据,但是从别人的努力和洞察中获益将会很愉快.
我现在正处于一个旷日持久的境地,有一个困难的项目,其中很大一部分被重构并检查了大量失败的测试。
我在 Maven 中运行 PIT,但很长一段时间都无法运行,因为测试必须是绿色的,但我希望至少在运行的测试上有 PIT 概述。
将失败的测试与 PIT 隔离的最有效方法是什么?
C:\Users\TZ>java -cp C:\Users\TZ\Desktop\femr-master\pitest-command-line-
1.2.4.jar;C:\Users\TZ\Desktop\femr-master\pitest-
1.2.4.jar;C:\Users\TZ\Desktop\femr-master\pitest-entry-
1.2.4.jar;C:\Users\TZ\Desktop\femr-master\junit-
4.12.jar;C:\Users\TZ\Desktop\batch-import-3.0\target\batch-import-
3.0.4.jar;C:\Users\TZ\Desktop\femr-
master\xmlpull_1_0_5.jar;C:\Users\TZ\Desktop\femr-master\xstream-1.4.10.jar
org.pitest.mutationtest.commandline.MutationCoverageReport --reportDir
C:\Users\TZ\Desktop --targetClasses org.neo4j.batchimport.* --targetTests
org.neo4j.batchimport.* --sourceDirs C:\Users\TZ\Desktop\batch-import-
3.0\src
Run Code Online (Sandbox Code Playgroud)
输出:
6:07:23 PM PIT >> INFO : Verbose logging is disabled. If you encounter an
problem please enable it before reporting an issue.
6:07:23 PM PIT >> INFO : Sending 0 test classes to minion
6:07:23 PM PIT >> INFO : Sent tests to minion
6:07:23 PM PIT >> INFO : Calculated coverage in 0 seconds.
6:07:23 PM PIT >> INFO …Run Code Online (Sandbox Code Playgroud) java ×6
bytecode ×2
java-8 ×2
jvm ×2
lambda ×2
pitest ×2
concurrency ×1
java-stream ×1
javaagents ×1
junit ×1
kotlin ×1
maven ×1
scala ×1
stack-trace ×1
unit-testing ×1