小编Nit*_*raj的帖子

在java hashmap实现键中首先分配给对象然后进行比较

看java的hashmap实现,无法理解一些行背后的原因.在下面从这里复制的代码中,在365-367行中,我无法理解他们为什么先将e.key赋值给k然后将==与key [(k = e.key)== key进行比较].为什么不直接做(e.key == key).此模式在代码中出现多次.

359 
360     final Entry<K,V> getEntry(Object key) {
361         int hash = (key == null) ? 0 : hash(key.hashCode());
362         for (Entry<K,V> e = table[indexFor(hash, table.length)];
363              e != null;
364              e = e.next) {
365             Object k;
366             if (e.hash == hash &&
367                 ((k = e.key) == key || (key != null && key.equals(k))))
368                 return e;
369         }
370         return null;
371     }
Run Code Online (Sandbox Code Playgroud)

java hashmap

9
推荐指数
1
解决办法
158
查看次数

OpenJDK Panama Vector API jdk.incubator.vector 没有为 Vector 点积提供改进的结果

我正在测试OpenJDK Panama Vector API jdk.incubator.vector 并在亚马逊 c5.4xlarge 实例上进行了测试。但在每种情况下,简单展开的矢量点积都无法执行 Vector API 代码。

我的问题是:为什么我无法获得如Richard Startin 的博客中所示的性能提升。同样的性能提升也在这次会议meetup中被英特尔人讨论过。有什么不见了?

JMH 基准测试结果:

Benchmark                                              (size)   Mode  Cnt      Score    Error  Units

FloatVector256DotProduct.unrolled                       1048576  thrpt   25   2440.726 ? 21.372  ops/s
FloatVector256DotProduct.vanilla                        1048576  thrpt   25    807.721 ?  0.084  ops/s
FloatVector256DotProduct.vector                         1048576  thrpt   25    909.977 ?  6.542  ops/s
FloatVector256DotProduct.vectorUnrolled                 1048576  thrpt   25    887.422 ?  5.557  ops/s
FloatVector256DotProduct.vectorfma                      1048576  thrpt   25    916.955 ?  4.652  ops/s
FloatVector256DotProduct.vectorfmaUnrolled              1048576  thrpt   25    877.569 ?  1.451  ops/s

JavaDocExample.simpleMultiply                           1048576  thrpt …
Run Code Online (Sandbox Code Playgroud)

java vectorization dot-product project-panama

9
推荐指数
1
解决办法
1018
查看次数

在不使用javascript api的情况下显示google direction web service的结果

我正在开发一个应用程序,它将在2个点之间找到方向,在谷歌地图上显示它并将其存储在服务器端,以便我可以在需要时再次渲染它以将一条路线与另一条路线进行比较.
我已成功使用谷歌地图api web服务找到路线,我也使用谷歌地图javascript v3找到路线并使用DirectionsRenderer在地图上显示它.
这两个服务都返回类似的JSON,其中包含JSON属性名称的不同(参见下面的示例1).更重要的是,JS api将lat/lng的不同属性名称从一个调用返回到另一个调用(参见下面的示例2).

所以问题是我无法使用从服务器端Web服务调用获得的JSON并直接将其传递给javascripts DirectionRenderer类来显示路由.而且,每次我在地图上显示路线时,我都要进行JS调用.这将导致不必要的配额使用.有没有更好的方法来做到这一点.我已经完成了以下问题,但我实际上无法在这里这里得到答案

例1:

Web服务呼叫结果:

{
    "routes" : [
      {
         "bounds" : {
            "northeast" : {
               "lat" : 12.9198217,
               "lng" : 77.6124895
            },
            "southwest" : {
               "lat" : 12.912811,
               "lng" : 77.60924989999999
            }
         },
          .....
Run Code Online (Sandbox Code Playgroud)

这没有"路径"属性.

Javascript V3调用结果:

{
"routes": [
    {
        "bounds": {
            "ta": {
                "d": 12.91281,
                "b": 12.919820000000001
            },
            "ga": {
                "b": 77.60925,
                "d": 77.61249000000001
            }
        },
        ......
        "path": [
                            {
                                "d": 12.913920000000001, …
Run Code Online (Sandbox Code Playgroud)

google-maps google-maps-api-3 map-directions

6
推荐指数
1
解决办法
1656
查看次数

java OOM关于创建2个十亿整数的数组

我正在用Java编写简单的程序来创建2个10亿大小的int数组。我用-Xms10G运行了该程序,即10GB的内存仍然出现OOM错误。以下是代码段。

public class TestBigIntArraySize {
  public static int arraySize = 1000_000_000;
  public static int [] firstArray = new int[arraySize];
  public static int [] secondArray = new int[arraySize];

  public static void main(String[] args) {
    System.out.println(1000_000_000 * Integer.SIZE);
  }
}
Run Code Online (Sandbox Code Playgroud)

就我所能想到的,用于十亿个int数组的内存将是System.out.println(1000_000_000 * Integer.SIZE); 返回1,935,228,928,小于2GB。因此,我的程序总要求最大为4GB。

即使我在方法调用中创建数组并返回数组或静态数组(如下所示)或在main()中,也会收到错误消息。工作所需的内存是12G,是我预期的3倍。我正在使用oracle java:jdk1.8.0_201

我尝试了-Xms10G -XX:NewRatio = 1 ---可行的选项。

但是我想进一步减少内存占用。

我尝试通过给eden提供更多内存的选项,-Xms9G -XX:NewRatio=0.5但是java抱怨非法参数。

我尝试通过选项将数组直接分配给旧gen的选项-Xms9G -XX:NewRatio=1 -XX:PretenureSizeThreshold=10000。但这也给OOM。

这只是一个实验项目,我只是在操纵阵列的位置。我想用最小的内存做到这一点。有人可以建议如何去做吗?什么Java选项,为什么?

java jvm out-of-memory jvm-arguments

5
推荐指数
1
解决办法
92
查看次数

MongoDB奇怪的writeResult行为

我正在使用mongodb(v2.6.7)和mongo(2.6.7)shell客户端.

我试图使用insert和update命令返回的WriteResult对象.

根据mongodocs的错误,它返回一个带有writeError子文档的writeResult对象.但我无法在shell或mongo的javascript文件中访问此子文档.

以下是我的问题的说明.

  • 我插入一个对象并获得成功的writeResult.
  • 然后我再次使用相同的_id插入,我正在正确设置了"writeError"的屏幕上正确打印了writeResult.
  • 当我用printjson()方法打印时,writeResult对象似乎包含writeError
  • 但是当我用JSON.stringify()打印它时,我无法看到"writeError".
  • writeResult.writeError也是未定义的,因此我无法访问其writeResult.writeError.code属性.

有人可以解释为什么会发生这种情况,以及正确的方法是什么.


afv:PRIMARY>writeResult=db.sysinfo.insert({_id:"myid",otherData:"otherDataValue"})

WriteResult({ "nInserted" : 1 })

afv:PRIMARY>writeResult=db.sysinfo.insert({_id:"myid",otherData:"otherDataValue"})

WriteResult({
    "nInserted" : 0,
    "writeError" : {
        "code" : 11000,
        "errmsg" : "insertDocument :: caused by :: 11000 E11000 duplicate key error index: afvadmin.sysinfo.$_id_  dup key: { : \"myid\" }"
    }
})

afv:PRIMARY> printjson(writeResult)
{
    "nInserted" : 0,
    "writeError" : {
        "code" : 11000,
        "errmsg" : "insertDocument :: caused by :: 11000 E11000 duplicate key error index: afvadmin.sysinfo.$_id_  dup …

mongodb mongo-shell

4
推荐指数
1
解决办法
1378
查看次数

CodeMirror:如何在编辑器中限制高度

我正在使用codemirror在网页上显示一些代码.但是当我初始化codemirror编辑器时,编辑器的高度远远超过代码中的行数.请看到这个小提琴或低于图像明白我在说什么 代码镜中额外高度的屏幕截图 下面是创建codemirror编辑器的代码.

var myCodeArea = document.getElementById("codeArea");
var myCodeMirror = CodeMirror(function(elt) {
  myCodeArea.parentNode.replaceChild(elt, myCodeArea);
}, {value: myCodeArea.innerHTML,
   lineNumbers:true, mode:"javascript"});
Run Code Online (Sandbox Code Playgroud)

我读了codemirror doc,但无法确定哪个属性控制高度.

请在这件事上给予我帮助

codemirror

3
推荐指数
2
解决办法
6848
查看次数