小编gan*_*ers的帖子

Java JVM最大堆大小可预先保留

有很多关于堆大小的帖子和站点,但是他们都没有提到如何找出我在调用jvm时可以保留的最大可能堆大小.

任务是以最大可用堆大小xmx = max动态启动我的jvm(不需要在这里讨论这个任务的对象!).

人们会想到读取当前可用或可用的内存并将该大小用于xms和xmx.但这不起作用.

例如在64位计算机和Windows操作系统上,24GB内存,可用虚拟内存大约1.8 GB :(这些由c#确定,在执行过程中执行Java命令)

jvm推出32位!根据其他网站和帖子的说法:64位操作系统上32位JVM的最大Java堆大小应该在1.4GB以上.

[09.07.2015 08:39:39] Total physical memory MB:        24002
[09.07.2015 08:39:39] Available physical memory MB:    16115
[09.07.2015 08:39:39] Total virtual memory MB:         2047
[09.07.2015 08:39:39] Available virtual memory MB:     1810
Run Code Online (Sandbox Code Playgroud)

用以下方法调用Java程序:

java -Xms1536m -Xmx1536m myApp

导致:

无法为1572864KB对象堆保留足够的空间

同样一直到1136米,这是最大的可能!

因此我的问题:如何预先检查堆大小可能调用jvm,而不试用错误?

UDPATE:根据这些评论,我提出了另一个问题,那就是那些Pro:你们如何运行Java应用程序?

  1. 选择您检查应用程序所需的堆大约需要.并且如果该堆不可能,则让用户死于错误
  2. 尝试错误:降低堆并重新运行应用程序,直到找到有效的最大堆
  3. 使用这种秘密方式确定保证最大堆大小并顺利运行(如果是这样,请放入你的信任圈:))

我对你的答案非常好奇!

java heap jvm

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

Solr 6.6.2分组查询

在Solr 6.6.2上进行以下设置:

Solr云集合,其文档具有字段ID,ContactId,属性启动和运行以及id上的唯一键.

可以有多个具有相同ContactId的文档.

每个联系人文档都有一个包含一行文本的文本字段属性.属性字段使用','分隔索引,例如属性:绿色命中.

例如:

+----+-----------+--------------+
| ID | ContactId |  Properties  |
+----+-----------+--------------+
|  1 | C1        | Blue,Green   |
|  2 | C1        | Blue,Yellow  |
|  3 | C2        | Green,Yellow |
+----+-----------+--------------+
Run Code Online (Sandbox Code Playgroud)

现在我需要找到所有ContactIds,其中Properties具有"Green"和"Yellow",允许此查询匹配此ContactID的所有文档.因此结果将是C1,C2.

我试图对结果进行分组,但我仍然无法查询分组结果.

group=true&group.field=ContactId&group.query=(Green AND Yellow)&q=(Green OR Yellow)
Run Code Online (Sandbox Code Playgroud)

我遵循的想法是查询(q)获取所有具有绿色或黄色的文档,而不是组中的分组.字段ContactId,然后是具有AND条件绿色和黄色的group.query.但那并没有成功.

在mySql中,只需要一个

group_concat(Properties) as grouped 
Run Code Online (Sandbox Code Playgroud)

并对该字符串执行类似操作:

grouped LIKE '%Green%' AND grouped LIKE '%Yellow%'
Run Code Online (Sandbox Code Playgroud)

如何在Solr索引上实现此查询?

到目前为止尝试引用和没有:

intersect(  
    search(w3, q=Properties:("Green"), fl="ContactId", sort="ContactId asc"),  
    search(w3, q=Properties:("Yellow"), fl="ContactId", sort="ContactId asc"),  
    on="ContactId" )
Run Code Online (Sandbox Code Playgroud)

派生自solr的例子:

intersect(  
    search(w3, q=Properties:("Green" OR "Green" AND "Yellow"), …
Run Code Online (Sandbox Code Playgroud)

grouping solr

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

具有通用映射的方法签名扩展对象

虽然这段代码正在运行,但它仍然在研磨我的齿轮:

public static <K, V> Map<K, V> entityListToIdMap(List<? extends BaseEntity<K>> list, Class<K> keyClass) {
    Map<K, V> map = new TreeMap<K, V>();
    if(list != null){
        for (BaseEntity<K> item : list) {
            map.put(item.getId(), (V) item);
        }
    }
    return map;
}
Run Code Online (Sandbox Code Playgroud)

我所缺少的是,告诉方法签名,V extends BaseEntity<K>.这也可能导致未经检查的警告,这使得必须将值中的项目转换为V.

我怎么能V说它必须extend BaseEntity<K>?

基于@Ori Lentz接受的答案,完整的解决方案:

public static <K, V extends BaseEntity<K>> Map<K, V> entityListToIdMap(List<V> list, Class<K> keyClass) {
    Map<K, V> map = new TreeMap<K, V>();
    if (list != null) {
        for (V item …
Run Code Online (Sandbox Code Playgroud)

java generics

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

标签 统计

java ×2

generics ×1

grouping ×1

heap ×1

jvm ×1

solr ×1