【问题标题】:What's the definition of "during the operation of the Java Virtual Machine"?“Java 虚拟机运行期间”的定义是什么?
【发布时间】:2014-12-28 18:08:09
【问题描述】:

来自JVMS chapter 6.3

[...] 下面定义的任何VirtualMachineError 子类 [InternalError, OutOfMemoryError, StackOverflowError, UnknownError] 可能在操作期间的任何时间被抛出Java虚拟机

JVMS如何定义短语“在Java虚拟机运行期间的任何时间”?

当前的 JVM 如何解释该短语?

具体来说,是不是意味着java.lang.InternalErrorjava.lang.OutOfMemoryErrorjava.lang.StackOverflowErrorjava.lang.UnknownError这四个错误可能会在between语句中抛出? :

// ....
A(); B(); C();
try {
     // nothing
} catch (InternalError | OutOfMemoryError | StackOverflowError | UnknownError e) {
     // may occur?
}
D(); E(); F();
try {
     ; // semi-colon
} catch (InternalError | OutOfMemoryError | StackOverflowError | UnknownError e) {
     // may occur?
}
G(); H(); I();
try {
     ; ; ;;  ;;;;; ; ; ;;; ;; ;; ;; ;; ; ;; ; ;; // ... semi-colons
} catch (InternalError | OutOfMemoryError | StackOverflowError | UnknownError e) {
     // may occur?
}
J(); K(); L();
// ....

【问题讨论】:

  • these 在我看来有点太相关了,不能在同一 5 分钟内发布。
  • @MaartenBodewes-owlstead,不要被长度所欺骗。 They took hours。但我将它们一起提交,因为它们相互引用。我无法链接到“无”。
  • 好吧,那倒是挺公道的,不过下次可能要留点空间,这样很可能会触发各种警报:)
  • Java 虚拟机是复杂的软件。在复杂的软件中,由于软件错误(或硬件故障),随时都可能发生意外情况。例如,查看遍布虚拟机(内存管理器、字节码解释器)的 OpenJDK (hg.openjdk.java.net) 源代码中的 ShouldNotReachHere() 调用。谷歌:site:openjdk.java.net ShouldNotReachHere 会给你一个提示。你的问题有什么意义?你是想责怪 Java 虚拟机没有给出神奇的保证,还是想解决一些具体的实际问题?
  • @xmojmr,面对错误,all bets are off。这个问题是关于 JVM 规范和有效的符合 JVM 对资源限制和诸如此类的反应。

标签: java jvm jls


【解决方案1】:

Java 虚拟机由许多部分组成。例如,垃圾收集器作为持久后台运行Thread。它可能会抛出其中一个 Exception 并且它肯定会出现随时(尤其是如果您自己的代码由于 gc 而停止)!

来自Java Garbage Collection Basics

什么是自动垃圾收集?

自动垃圾回收是查看堆内存,识别哪些对象正在使用,哪些没有,并删除未使用的对象的过程。使用中的对象或引用的对象意味着程序的某些部分仍然维护指向该对象的指针。程序的任何部分都不再引用未使用的对象或未引用的对象。所以可以回收未引用对象使用的内存。

tl;dr

是的。它们可以在语句之间抛出。

【讨论】:

  • 嗯,是 GC 错误 not confined within the GC threads
  • 可以OutOfMemoryError,你的下一条指令可能是分配内存;说明可能会重新排序。 Boom,你在两个线程中都会遇到 GC 错误。
猜你喜欢
  • 2013-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-28
  • 1970-01-01
相关资源
最近更新 更多