草庐IT

jvm-debug

全部标签

java - 方法中未使用的局部变量是否会在 JVM 中获取内存?

我在SODouninitializedprimitiveinstancevariablesusememory?中看到了这篇文章它指出“在Java中,声明一个类级别的实例变量而不初始化它是否需要内存?例如:inti;如果我不使用i=5初始化它,请使用任何内存;?”我的问题是,如果是局部变量,比如说我有一个方法foo()publicintfoo(){intx;//Writecodewhichdoesnotuse/initializex}局部变量x会不会占用内存?编辑乔恩的答案是更新:对此进行更多研究,我发现这个页面向我表明,尽管编译后的字节码暗示空间是为x分配的,但它确实可能被jvm优化掉

java - 两台机器之间的 JVM 堆复制

连接在同一个网络中运行同一个Java应用程序的两台可分离计算机如何通过在彼此之间同步它们的堆来保持相同状态的基本原则是什么?我相信Terracotta完成这项任务,但我不知道某些伪代码将如何描述其核心功能。我只是想了解这项技术。 最佳答案 TerracottaDSO通过操作类(以及JDK的类等)的字节码来工作。关于如何以及何时执行此操作的说明是Terracotta配置文件的一部分。字节码修改查找某些字节码,例如字段读取或写入或监视器进入或退出。每当出现这些指令时,就会在该位置周围添加代码,以在分布式存储中执行适当的操作。比如同步获取

jvm中的Java对象ID

在Eclipse中调试时,对象值附近会显示一个对象ID。例如:28332是session对象的ID。另一个示例:waitingfor:(id=101)显示在Debug面板中。这些ID既不是哈希码也不是System.identityHashCode。有人知道-如何获取对象的thisid? 最佳答案 我想他们内部有一个IdentityHashMap,为每个对象分配一个唯一的(但在其他方面没有意义的)整数。这应该在Eclipse调试器内部(不是对象具有的特殊id)。你是问怎么搞定的?编辑:我会像这样设置断点(注意我不熟悉Eclipse):

java - 了解最大 JVM 堆大小 - 32 位与 64 位

我有read32位Windows上的最大堆大小约为1.5GB,这是因为JVM需要连续内存。有人可以解释“连续内存”的概念以及为什么在Windows上最多只有1.5GB吗?其次,64位Windows上的最大堆大小是多少,为什么这与32位上可用的不同? 最佳答案 32位/64位部分与Java无关事实证明,32位系统中的内存位置由32位无符号整数引用。这允许多达2^32个可能的内存位置。由于每个位置存储1个字节,因此如果您愿意,您可以获得2^32个字节或4GB。在64位系统上,有2^64个位置,即16艾字节。现在,在Windows中,连续

java - (Oracle) Java JVM 如何知道闰秒正在发生?

一个leapsecondwilloccur2015年6月30日。不同的操作系统似乎以不同的方式处理这种情况。在我的特殊情况下,我们正在运行一个RedHat6.4系统,该系统带有高度依赖时间的定制Java(JDK1.7)软件。根据一些recentRedHatreleasedinformation我发现,我们系统的NTP守护进程会通过重复23:59:59两次来确保操作系统自动处理闰秒。我的问题是:如果我有一个长时间运行的JDK1.7进程,它如何知道闰秒正在发生?我的意思是,Java最终如何知道IERS人们已经决定插入闰秒?Date文档似乎表明知道闰秒,但似乎无济于事。我可以假设JDK,当构

java - Scala 宏和 JVM 的方法大小限制

我正在用Scala宏替换Java程序中的一些代码生成组件,并且遇到了Java虚拟机对单个方法生成的字节码大小的限制(64KB)。例如,假设我们有一个很大的XML文件,它表示我们想要在程序中使用的从整数到整数的映射。我们想避免在运行时解析这个文件,所以我们将编写一个宏来在编译时进行解析并使用文件的内容来创建我们方法的主体:importscala.language.experimental.macrosimportscala.reflect.macros.ContextobjectBigMethod{//Forthissimplifiedexamplewe'lljustmakesomeda

java - 如果我使用最新的 JDK 编译 Java 文件,那么旧的 JVM 是否能够运行 .class 文件?

字节码是否依赖于创建它的Java版本? 最佳答案 IfIcompiledajavafileinthenewestJDK,wouldanolderJVMbeabletorunthe.classfiles?这取决于三件事:您正在谈论的实际Java版本。例如,1.4.0JVM可以运行由1.4.2编译器编译的代码,但1.3.xJVM不能1。使用的编译标志。有一个-target编译器标志,告诉它生成将在较旧的(目标)JVM上运行的代码。-source编译器标志告诉它只接受旧版JVM的语言特性。(这种方法并不总是有效,具体取决于您的代码使用的J

java - 确定 java 应用程序是否在 Eclipse 中处于 Debug模式

我想根据我是否正在调试来更改日志记录级别,但我找不到代码片段来检查应用程序是否在Debug模式下运行。我正在使用eclipse来调试应用程序,所以如果该解决方案仅在Eclipse中有效,那就没问题了。 最佳答案 在how-to-find-out-if-debug-mode-is-enabled上找到答案booleanisDebug=java.lang.management.ManagementFactory.getRuntimeMXBean().getInputArguments().toString().indexOf("-age

java - 如何以编程方式检查应用程序是否在 Debug模式下运行?

我必须在我的应用程序的某个位置确定我的应用程序是在Debug模式还是实时模式下运行。是否有任何功能或代码可用于检查。在开/关的任何一种情况下都返回真/假。如果是这样,请帮帮我。提前致谢。 最佳答案 从问题中看不清楚debug模式是否指的是:应用是否可调试当前是否正在调试应用(例如通过ADB)第一个被CommonsWare'sanswer覆盖:booleanisDebuggable=0!=(getApplicationInfo().flags&=ApplicationInfo.FLAG_DEBUGGABLE);第二个是:boolean

java - 运行 Java 给出 "Error: could not open ` C :\Program Files\Java\jre6\lib\amd64\jvm. cfg'"

经过多年的正常工作,我在尝试启动JVM时突然收到此消息:Error:couldnotopen`C:\ProgramFiles\Java\jre6\lib\amd64\jvm.cfg'我尝试卸载,但收到一条消息说缺少DLL(未指定)尝试重新安装,但无济于事。同时,在尝试启动Scala时,我得到:\Java\jdk1.6.0_25\bin\java.exewasunexpectedatthistime.检查%JAVA_HOME%和%path%-都OK谁能帮忙? 最佳答案 我检查了我的环境变量-JAVA_HOME&PATH,它们都指向C: