我正在尝试使用Unsafe迭代内存而不是遍历byte []中的值.使用unsafe分配内存块.内存足以容纳65536个字节值.
我在尝试这个:
char aChar = some character
if ((byte) 0 == (unsafe.getByte(base_address + aChar) & mask)){
// do something
}
Run Code Online (Sandbox Code Playgroud)
代替:
char aChar = some character
if ((byte) 0 == ( lookup[aChar] & mask )){
// do something
}
Run Code Online (Sandbox Code Playgroud)
我认为 Unsafe可以比使用常规数组访问更快地访问内存,并对每个索引执行索引检查...
只是一厢情愿地认为jvm会有一个特殊的操作(不安全),它会以某种方式使常规数组访问和迭代更快.在我看来,jvm在正常的byte []迭代中运行良好,并且可以使用普通的,纯粹的,vanilla java代码快速完成它们.
@millimoose击中众所周知的"钉在头上"
"不安全可能对许多事情都有用,但这种微观优化程度不是其中之一." - 毫米"
在非常严格的有限情况下使用Unsafe会更快:
使用Unsafe(在我的测试中)比较慢:
即使server调用了jvm选项也会更慢
在32位jvm(64位甚至更慢?)下面的代码中,不安全从9%或更多(1_GB数组和UnsafeLookup_8B(最快的一个)慢)
这有什么理由吗?**
当我运行下面发布的代码yellowB(检查1GB字节[])时,法线仍然是最快的:
C:\Users\wilf>java -Xms1600m -Xprof -jar "S:\wilf\testing\dist\testing.jar"
initialize data...
initialize data …Run Code Online (Sandbox Code Playgroud) 有谁知道如何配置它,以便SOAP服务和REST服务可以在应用程序服务器之外使用Jersey(Grizzly)共享同一个端口?
这些服务共享相同的端口但不是相同的基本URL,因此应该能够在该端口上并行运行.但是,有一个端口绑定错误..
所有这些都在自定义服务应用程序中,并且没有web.xml等.
REST服务使用Jersey,Soap服务是在端点上发布的类"ReceptionService".
URI soapUri = URI.create("192.168.0.0:1234\soap\Crm")
URI restUri = URI.create("192.168.0.0:1234\crm")
// START SOAP SERVICE
Object reception = getObjectResource(ReceptionService.class);
Endpoint e = Endpoint.publish(soapUri, reception);
// START REST SERVICE
ResourceConfig rc = new ResourceConfig().packages("company.rest");
HttpServer server = GrizzlyHttpServerFactory.createHttpServer(restUri, rc);
Run Code Online (Sandbox Code Playgroud)
当我尝试这个时,Grizzly吐出'java.net.BindException:地址已经在使用:bind'
我的肥皂服务接待设置如下:
@WebService(targetNamespace = "company.crm")
@SOAPBinding(style = SOAPBinding.Style.DOCUMENT, use = SOAPBinding.Use.LITERAL, parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)
public class Reception implements ReceptionService {
... methods
}
Run Code Online (Sandbox Code Playgroud)
我的休息服务课像往常一样注释......
@Path("hello/{username}")
public class Hello { ... }
Run Code Online (Sandbox Code Playgroud)
我在这方面有点新手,任何指针都会受到赞赏.请不要打扰我建议运行应用程序服务器.这不是问题 - 问题是如何解决端口绑定问题而不转移到其他一些Web服务框架?
注意RE BOUNTY:我不能完全忘记这一点
"赏金获胜者将演示如何在同一端点上一起使用Jersey for REST和Java …
我在需要同步的接口中有许多默认方法,似乎只有this可用:
default void addUniqueColumns(List<String> names) {
synchronized (this) {
... do something
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,我想在私有锁上同步而不是this为了更好的控制:
default void addUniqueColumns(List<String> names) {
synchronized (lock) { // how to get a private lock in a default method??
... do something
}
}
Run Code Online (Sandbox Code Playgroud)
解决方案?聪明的解决方法?或者只是忍受它:)!
我想传递一个时间数字,TimeUnit它就在.
long number = some number;
TimeUnit timeUnit = some arbitrary time unit
Run Code Online (Sandbox Code Playgroud)
什么可以Object将Java中的时间和时间单元保持在一起?
我有一个byte[],我想制作一个字节流。
对于int[]andlong和double,我在 Arrays 类中看到了方法:
Arrays.stream(int[] array)
Arrays.stream(long[] array)
Arrays.stream(double[] array)
Run Code Online (Sandbox Code Playgroud)
但是,我没有看到任何 method Arrays.stream(byte[] array)。
那么,将字节原语流作为实际字节获取的最简单、最简洁的方法是什么?
我需要对 byte[] 进行转换,并且需要一个字节流来使用所有 Stream 函数来完成此操作(不,我不想将它们全部转换为整数。)
谁有好的解决办法吗?
附言。其他人从微控制器 API 向我提供 byte[] ...所以如果没有必要,我不想使用其他数据类型。
谢谢。
当Stream在try-with-resources中使用a 时,应该关闭阅读器.
鉴于这种:
try(Stream<String> lines = new BufferedReader(reader).lines()) {
return lines.map(it -> trim ? it.trim() : it)
.collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud)
......读者没有被关闭?
此测试失败:
AtomicBoolean closed = new AtomicBoolean(false);
Reader r = new StringReader(" Line1 \n Line2") {
@Override
public void close() {
super.close();
closed.set(true);
}
};
try(Stream<String> lines = new BufferedReader(r).lines()) {
lines.map(it -> trim ? it.trim() : it)
.collect(Collectors.toList());
}
assertTrue("Reader was not closed.",closed.get());
Run Code Online (Sandbox Code Playgroud) 我使用的是Java版本1.8.0_31.
我试图使用FileVisitor接口递归访问目录树.程序应该打印C:/books文件名以"Ver"开头的所有文件的名称.该目录C:/books有两个以"Ver"开头的文件,Version.yxy和Version1.txt.我尝试过使用file.getFileName().startsWith("Ver")但是返回false.
我错过了什么吗?这是我的代码:
public class FileVisitorTest {
public static void main(String[] args) {
RetriveVersionFiles vFiles = new RetriveVersionFiles();
try {
Files.walkFileTree(Paths.get("c:", "books"), vFiles);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class RetriveVersionFiles extends SimpleFileVisitor<Path> {
public FileVisitResult visitFile(Path file, BasicFileAttributes attr) {
System.out.println(file.getFileName().startsWith("Ver") + " "
+ file.getFileName());
if (file.getFileName().startsWith("Ver")) {
//not entering this if block
System.out.println(file);
}
return FileVisitResult.CONTINUE;
}
}
Run Code Online (Sandbox Code Playgroud)
上面代码的输出是: …
我正在寻找一个Stream上的操作,使我能够每隔n项执行一次非终端(和/或终端)操作.虽然我使用素数流,例如,流可以很容易地生成网络请求,用户操作或其他一些冷数据或实时源.
由此:
Duration start = Duration.ofNanos(System.nanoTime());
IntStream.iterate(2, n -> n + 1)
.filter(Findprimes::isPrime)
.limit(1_000_1000 * 10)
.forEach(System.out::println);
System.out.println("Duration: " + Duration.ofNanos(System.nanoTime()).minus(start));
Run Code Online (Sandbox Code Playgroud)
对于像这样的流函数:
IntStream.iterate(2, n -> n + 1)
.filter(Findprimes::isPrime)
.limit(1_000_1000 * 10)
.peekEvery(10, System.out::println)
.forEach( it -> {});
Run Code Online (Sandbox Code Playgroud) 使用新Java 8迭代Map中所有条目的最简单方法是什么?
java ×9
java-8 ×5
java-stream ×2
lambda ×2
duration ×1
endpoint ×1
map ×1
performance ×1
rest ×1
soap ×1
synchronized ×1
time ×1
timeunit ×1
unsafe ×1