众所周知,可以限制Java堆大小-Xmx<amount><unit>
,其中unit
数据量单位如Gigabyte,Megabyte等.我知道这-Xmx128M
意味着128 Mebibytes(= 128*1024*1024字节).
但这是真的-Xmx100m
吗,也可以使用兆字节使用的十进制单位(这将是100*1000*1000字节)?
那么是否可以通过使用小写单位后缀k, m, g
来代替K, M, G
?来使用这个十进制单位?
我有一个关于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
我正在阅读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) 我编写了一个我在debian 7 vserver上运行的Java服务器应用程序.应用程序本身工作得很好,但我注意到一些非常奇怪的东西.
在调用之后,java -Xmx200M -jar "CCU.jar
我希望看到一个运行我的Java进程CCU.jar
.
调用top
时只有一个java进程(如预期的那样).但是当我打电话时,htop
我得到了这个:
所有这些子进程看起来是同一个进程(它们在表中显示的数据完全相同)但具有不同的PID?
我有一个多线程应用程序和一个单例类:
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()
将返回所有线程的权值.
这个假设是对的吗?为什么/为什么不呢?
我目前正在阅读PHP规范:https://github.com/php/php-langspec
现在,我在这里看到了list-intrinsic规范,它指出对于像下面这样的list-intrinsic结构,simple-assignment-expression的右边必须是一个指定数组的表达式:
list (list-expression-list opt ) = 表达式
但是这里的 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
不是数组.所以这会导致致命错误,对吧?
我是否遗漏了规范中的内容,或者这实际上是不一致的?
我正在阅读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) 是否可以同时从两个或多个不同的进程读取同一个文件?
我想在 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 的系统上工作。
我正在学习C并且目前正在学习指针.我理解将一个字节的地址存储在内存中作为变量的原理,这使得从内存中获取字节并写入内存地址成为可能.
但是,我不明白指针的地址存储在何处.假设一个指针的值(内存中一个字节的地址)存储在内存中 - 程序如何知道指针的存储位置?难道不需要指针指针导致指针指针无穷无尽的指针......?
UPDATE
实际问题是:"编译器如何为变量分配内存地址".我发现这个问题指出了这个话题.
感谢所有回答的人.
我有一个关于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.1
和GET HTTP/1.1
同一个吗?(GET
和之间有两个空格HTTP/1.1
)