小编Min*_*ock的帖子

Java内存限制-Xmx后缀:上限与小写m/M和g/G.

众所周知,可以限制Java堆大小-Xmx<amount><unit>,其中unit数据量单位如Gigabyte,Megabyte等.我知道这-Xmx128M意味着128 Mebibytes(= 128*1024*1024字节).

但这是真的-Xmx100m 吗,也可以使用兆字节使用的十进制单位(这将是100*1000*1000字节)?

那么是否可以通过使用小写单位后缀k, m, g来代替K, M, G?来使用这个十进制单位?

java memory heap jvm jvm-arguments

21
推荐指数
1
解决办法
2万
查看次数

是否与edegs编译器同步重新排序两个方向的障碍?

我有一个关于Java内存模型的问题.给出以下示例:

action 1
action 2
synchronized(monitorObject) { //acquire
    action 3
} //release
action 4
Run Code Online (Sandbox Code Playgroud)

acquire并且release可以是任何与边缘同步(锁定,解锁,启动线程,连接线程,检测线程中断,易失性写入,易失性读取等)

它是保证action 3不能被移动之前的获取和不能被移动的释放?

而且是保证action 2不能被移动的获取(无论是发布之前,也没有之后),并且action 4不能移动之前的版本(无论是acquire之前也不之后)?

那么与编译器的重新排序操作同步 - 边缘" 双向障碍 "?


编辑1 我担心这一点,因为如果同步 - 边缘不是双向重新排序障碍,编译器可以通过将锁获取移动到其他人来简单地创建死锁.

或者是双向重新排序障碍甚至不需要防止这种情况,因为锁定获取不能被推送到其他人,因为这会改变同步顺序?


编辑2 操作1,2,3和4是JMM定义的" 线程间操作 " .


编辑3 这是一个示例,显示重新排序如何导致死锁:

x和y是共享变量,syncA和syncB可以由任何其他线程获取.但是使用以下代码,可能没有死锁.

/* 1 */  synchronized(syncA) {
/* 2 */      x = 1;
/* 3 */  }
/* 4 */  y = 0;
/* 5 …
Run Code Online (Sandbox Code Playgroud)

java multithreading memory-model compiler-optimization java-memory-model

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

数组参数中的数组长度

我正在阅读C编程: KNKing 的现代方法学习C编程语言,本章讲述函数和数组参数.解释说,可以使用这些结构来表示数组参数的长度:

1.

void myfunc(int a, int b, int[a], int[b], int[*]); /* prototype */

void myfunc(int a, int b, int n[a], int m[b], int c[a+b+other_func()]) {
... /* body */
}
Run Code Online (Sandbox Code Playgroud)

2.

void myfunc(int[static 5]); /* prototype */

void myfunc(int a[static 5]) {
... /* body */
}
Run Code Online (Sandbox Code Playgroud)

所以问题是:

一个.示例1中的构造是纯粹的装饰还是它们对编译器有影响?

就是static在这种情况下只有美容性质的修改?究竟是什么意思和做法?

C.是否也可以像这样声明一个数组参数; 它和实例1一样是化妆品吗?

void myfunc(int[4]);

void myfunc(int a[4]) { ... }
Run Code Online (Sandbox Code Playgroud)

c arrays parameters static function

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

为什么Java会产生如此多的进程?

我编写了一个我在debian 7 vserver上运行的Java服务器应用程序.应用程序本身工作得很好,但我注意到一些非常奇怪的东西.

在调用之后,java -Xmx200M -jar "CCU.jar我希望看到一个运行我的Java进程CCU.jar.

调用top时只有一个java进程(如预期的那样).但是当我打电话时,htop我得到了这个:

htop与奇怪的子进程

所有这些子进程看起来是同一个进程(它们在表中显示的数据完全相同)但具有不同的PID?

java debian process htop

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

Threadsafe Singleton没有Java同步?

我有一个多线程应用程序和一个单例类:

public final class Singleton {

    private static MyClass mc;

    public static final Object getInstance() {
            if(mc == null) {
                mc = new MyClass();
            }
            return mc;
    }

}
Run Code Online (Sandbox Code Playgroud)

当然,这在一般的多线程场景中不起作用.但请考虑以下情形:

  • 一开始只有一个线程
  • 这一个线程getInstance()第一次调用,以便初始化mc.
  • 之后,所有其他线程由第一个线程启动.

我的假设:

这应该工作,因为mc字段的初始化和对象的构造发生 - 在Thread.start()启动其他线程的所有后续调用之前.并且Thread.start()线程发生在该线程的所有其他操作之前.它遵循的初始化mc之前发生的所有其他线程的所有行动,以便getInstance()将返回所有线程的权值.

这个假设是对的吗?为什么/为什么不呢?

java singleton multithreading double-checked-locking

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

PHP文档不一致?

我目前正在阅读PHP规范:https://github.com/php/php-langspec

  1. 现在,我在这里看到了list-intrinsic规范,它指出对于像下面这样的list-intrinsic结构,simple-assignment-expression的右边必须是一个指定数组的表达式:

    list (list-expression-list opt ) = 表达式

  2. 但是这里的 php.net 列表文档给出了一个包含这个的例子:

    $result = $pdo->query("SELECT id, name, salary FROM employees");
    while (list($id, $name, $salary) = $result->fetch(PDO::FETCH_NUM)) {
        //output $id, $name and $salary
    }
    
    Run Code Online (Sandbox Code Playgroud)

如果没有更多的行,那就是PDOStatement::fetch(PDO::FETCH_NUM)返回FALSE.但赋值表达式的右侧 必须是数组 - 而FALSE不是数组.所以这会导致致命错误,对吧?

我是否遗漏了规范中的内容,或者这实际上是不一致的?


根据PHP bugreport

php mysql pdo specifications list

7
推荐指数
2
解决办法
120
查看次数

使用goto跳过变量声明?

我正在阅读C编程 - KNKing 的现代方法来学习C编程语言,并注意到goto语句不能跳过变长数组声明.

但现在的问题是:为什么goto跳转允许跳过​​固定长度的数组声明和普通声明?更准确地说,根据C99标准,这些例子的行为是什么?当我测试这些案例时,似乎声明实际上没有被跳过,但这是正确的吗?声明可能已跳过的变量是否可以安全使用?

1.

goto later;
int a = 4;
later:
printf("%d", a);
Run Code Online (Sandbox Code Playgroud)

2.

goto later;
int a;
later:
a = 4;
printf("%d", a);
Run Code Online (Sandbox Code Playgroud)

3.

goto later;
int a[4];
a[0] = 1;
later:
a[1] = 2;
for(int i = 0; i < sizeof(a) / sizeof(a[0]); i++)
  printf("%d\n", a[i]);
Run Code Online (Sandbox Code Playgroud)

c arrays goto variable-declaration

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

多个Java进程可以同时读取同一个文件吗?

是否可以同时从两个或多个不同的进程读取同一个文件?

我想在 Java 应用程序中做这样的事情:

final File f = new File("read-only-file");
final FileInputStream in = new FileInputStream(f);
int b;
while((b = in.read()) != null) {
    //process b
    Thread.sleep(10); //several read processes would really happen at the same time
}
Run Code Online (Sandbox Code Playgroud)

没有应用程序会写入文件,但多个线程/应用程序需要同时执行上面的代码。上面的代码是否正常,或者在这种情况下我需要使用任何特殊机制吗?

此外,该解决方案应该是独立于平台的,并且必须在类似 Linux 的系统上工作。

java linux io concurrency file

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

存储在C中的指针地址在哪里?

我正在学习C并且目前正在学习指针.我理解将一个字节的地址存储在内存中作为变量的原理,这使得从内存中获取字节并写入内存地址成为可能.

但是,我不明白指针的地址存储在何处.假设一个指针的值(内存中一个字节的地址)存储在内存中 - 程序如何知道指针的存储位置?难道不需要指针指针导致指针指针无穷无尽的指针......?


UPDATE

实际问题是:"编译器如何为变量分配内存地址".我发现这个问题指出了这个话题.

感谢所有回答的人.

c memory variables pointers memory-address

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

HTTP路径必须以斜杠开头吗?

我有一个关于HTTP格式的问题.HTTP请求的第一行看起来像这样:

GET /path/to/resource.txt HTTP/1.1
Run Code Online (Sandbox Code Playgroud)

或换句话说:

METHOD URI HTTP-VERSION
Run Code Online (Sandbox Code Playgroud)

它是否需要URI/字符开头,以便它们/path/to/resource.txt是相同的path/to/resource.txt并且两者都有效?

如果一个领导/是不需要的,都是GET / HTTP/1.1GET HTTP/1.1同一个吗?(GET和之间有两个空格HTTP/1.1)

protocols http file path web

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