小编Adw*_*mar的帖子

即使 Xms = Xmx,G1GC 是否会向操作系统释放内存?

喜欢读一些答案后,这个JEP-346,我已经意识到,G1确实释放内存返回给操作系统。

然而,它是否将内存释放回操作系统,甚至到了当前内存使用量可能低于初始堆内存的程度(即在此 JEP 之前,在我的情况下为 JDK11)?

假设我有一个 Java 11 VM在RAM上运行XmsXmx设置为,但是我只消耗大约. G1 会向操作系统释放足够的内存吗?5GB8GB1GB

我没有在任何地方找到任何文件说 G1 仅限于释放Xms记住阈值。

我在生产中观察到这一点,MemAvailable 一直减少到一个点,然后在 GC 之后,它在 8GB 的​​盒子上跃升至接近 30-35%。所以我假设它正在释放内存,这就是 MemAvailable 跳回的原因。

另外,向操作系统释放内存到底是什么意思,它是调用 free/unmap 吗?

java garbage-collection g1gc java-11

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

Java中通用括号之间没有空格的推理

查看Checkstyle 文档中的GenericWhitespaceCheck

左尖括号 ( <):

  • 仅在通用方法定义中应以空格开头。
  • 在方法名称或类型名称之前不应以空格开头。
  • 在所有情况下都不应该跟有空格。

右尖括号 ( >):

  • 在所有情况下都不应该以空格开头。
  • 在几乎所有情况下都应该跟有空格,除了菱形运算符和方法名称之前。

我不确定我是否完全理解为什么后面<不应该跟一个空格以及为什么>前面不应该跟一个空格的原因。

换句话说,为什么Map<String>公约结束了Map < String >

这仅仅是因为随着参数数量和深度的增加,没有空格的版本更具可读性。

比如,Map<String, List<String>>比,更易读Map < String, List < String > >

另外作为一个一般问题,是否有一些存储库/指南可以解释 Checkstyle 约定背后的原因?

java whitespace readability checkstyle code-readability

6
推荐指数
2
解决办法
661
查看次数

为什么 Collections.unmodifiableMap 不检查传递的地图是否已经是 UnmodifiableMap?

查看java.util.Collections.unmodifiableMap实现(OpenJDK 11):

    /**
     * Returns an <a href="Collection.html#unmodview">unmodifiable view</a> of the
     * specified map. Query operations on the returned map "read through"
     * to the specified map, and attempts to modify the returned
     * map, whether direct or via its collection views, result in an
     * {@code UnsupportedOperationException}.<p>
     *
     * The returned map will be serializable if the specified map
     * is serializable.
     *
     * @param <K> the class of the map keys
     * @param <V> the class …
Run Code Online (Sandbox Code Playgroud)

java performance

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

如果堆栈跟踪的长度是偶数,则 JIT 重新编译以在多次迭代后执行快速抛出

下面的代码,

public class TestFastThrow {

    public static void main(String[] args) {
        int count = 0;
        int exceptionStackTraceSize = 0;
        Exception exception = null;
        do {
            try {
                throwsNPE(1);
            }
            catch (Exception e) {
                exception = e;
                if (exception.getStackTrace().length != 0) {
                    exceptionStackTraceSize = exception.getStackTrace().length;
                    count++;
                }
            }
        }
        while (exception.getStackTrace().length != 0);
        System.out.println("Iterations to fastThrow :" + count + ", StackTraceSize :" + exceptionStackTraceSize);
    }

    static void throwsNPE(int callStackLength) {
        throwsNPE(callStackLength, 0);
    }

    static void throwsNPE(int callStackLength, int count) { …
Run Code Online (Sandbox Code Playgroud)

java jit jvm

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

奇怪的C++行为.价值被覆盖

#include <iostream>
#include <stdio.h>
using namespace std;
int main(){
int t;
scanf("%d",&t);
while(t--){
    long long int val;
    char op;
    scanf("%lld",&val);
    while(true){
        long long int x;
        scanf("%s",&op);
        if(op=='=')break;
        scanf("%lld",&x);
        cout<<"***"<<t<<endl;
        if(op=='+')val+=x;
        else if(op=='-')val-=x;
        else if(op=='*')val*=x;
        else val/=x;
    }
    printf("%lld",val);
 }
Run Code Online (Sandbox Code Playgroud)

}

在上面的代码中,我无法理解为什么在x输入后t的值被设置为0.您甚至可以打印并检查t是否设置为零.我甚至在ideone上检查了它.http://ideone.com/JeCbSv有 什么帮助吗?

c++ scanf undefined-behavior

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