在谈论.NET时,我有时会听到/读到它,例如"托管代码"和"非托管代码",但我不知道它们是什么以及它们之间的区别是什么.根据定义,它们有什么区别?使用它们中的任何一个会产生什么后果?这种区别仅存在于.NET/Windows中吗?
在阅读了关于这个主题的一些材料之后,我仍然不确定编译语言和解释语言之间的区别是什么.我被告知这是Java和JavaScript之间的差异之一.请有人帮我理解吗?
我读到这一点,一个java源代码被编译成'字节码',然后由JIT再次'编译'成'机器码'.也就是说,首先将源代码编译成与平台无关的字节码,然后再将其编译为特定于机器的代码.那为什么它被称为解释和编译语言?解释发生在哪里?
似乎JVM使用了一些固定数量的内存.至少我经常看到参数-Xmx
(对于最大尺寸)和-Xms
(对于初始尺寸)表明这一点.
我觉得Java应用程序不能很好地处理内存.我注意到的一些事情:
甚至一些非常小的示例演示应用程序也会加载大量内存.也许这是因为加载了Java库.但为什么需要为每个Java实例加载库?(这似乎是因为多个小应用程序线性占用更多内存.请参阅此处了解我描述此问题的一些细节.)或者为什么这样做?
像Eclipse这样的大型Java应用程序经常会因一些OutOfMemory异常而崩溃.这总是很奇怪,因为我的系统上仍然有足够的内存.通常,它们会在运行时消耗越来越多的内存.我不确定他们是否有一些内存泄漏,或者这是因为内存池中的碎片 - 我觉得后者就是这种情况.
例如,Java库似乎需要比类似强大的库(如Qt)更多的内存.为什么是这样?(比较,启动一些Qt应用程序并查看它们的内存使用情况并启动一些Java应用程序.)
为什么它不仅仅使用基础系统技术malloc
和free
?或者如果他们不喜欢libc实现,他们可以使用jemalloc(就像在FreeBSD和Firefox中一样),这似乎相当不错.我很确定这会比JVM内存池表现更好.而且不仅表现更好,还需要更少的内存,尤其是 适用于小型应用.
另外:有人已经尝试过吗?我会对基于LLVM的Java JIT编译器感兴趣,它只使用malloc
/ free
进行内存处理.
或者这也可能与JVM实现和实现不同?我主要使用Sun JVM.
(另请注意:我不是直接在这里谈论GC.GC只负责计算可删除的对象并初始化内存释放但实际的释放是一个不同的子系统.Afaik,它是一些自己的内存池实施,而不仅仅是打电话free
.)
编辑:一个非常相关的问题:为什么(Sun)JVM具有固定的内存使用上限?或者换句话说:为什么JVM处理内存分配的方式与本机应用程序不同?
可能重复:
Java是编译语言还是解释型编程语言?
为什么Java既是编译语言又是解释语言?
我们首先使用javac(编译)编译java程序,然后使用java(解释)运行程序.那有什么好处?
此外,JIT角色在哪里?
我有一个由三列组成的 Spark DataFrame:
id | col1 | col2
-----------------
x | p1 | a1
-----------------
x | p2 | b1
-----------------
y | p2 | b2
-----------------
y | p2 | b3
-----------------
y | p3 | c1
Run Code Online (Sandbox Code Playgroud)
申请后,df.groupBy("id").pivot("col1").agg(collect_list("col2"))
我得到以下数据帧(aggDF):
+---+----+--------+----+
| id| p1| p2| p3|
+---+----+--------+----+
| x|[a1]| [b1]| []|
| y| []|[b2, b3]|[c1]|
+---+----+--------+----+
Run Code Online (Sandbox Code Playgroud)
然后我找到除了列之外的id
列的名称。
val cols = aggDF.columns.filter(x => x != "id")
Run Code Online (Sandbox Code Playgroud)
之后我cols.foldLeft(aggDF)((df, x) => df.withColumn(x, when(size(col(x)) > 0, col(x)).otherwise(lit(null))))
用null
. …
我正在准备核心java,我有疑问
javap是反汇编程序还是反编译程序?他们之间有什么区别?使用哪些java CLI命令?
我已经完成了一些Java编程和很少的C和PHP编程.最近我开始学习Python,因为语言似乎很有趣.
但SO上的几篇文章似乎指出Python不适合并发编程.与那些拥有编译器的语言相比,它也更慢.我也喜欢静态类型语言的优点,但Python是动态类型的.所以我的问题是,是否有一种语言符合以下标准.
1)有翻译(为了更快的发展)
2)有一个编译器(因为编译的代码运行得更快)
3)具有OO功能
4)静态打字
我遇到了满足上述标准的OCaml.但SO上的帖子让我相信OCaml不适合并发编程.所以第五个标准是
5)适合并发编程.
PS: - 我不是编程语言方面的专家,所以如果我上面的任何观察结果有误,请耐心等待.
python interpreter ocaml programming-languages static-typing
java ×5
interpreter ×2
jvm ×2
.net ×1
apache-spark ×1
javascript ×1
jit ×1
managed ×1
memory ×1
ocaml ×1
python ×1
unmanaged ×1
windows ×1