Tag: jvm

使用reflection更改字符串的效果

众所周知,String在java中是不可变的。 但是,可以通过获取Field并设置访问级别来使用reflection来更改它。 (我知道这是未经修改的,我不打算这样做,这个问题纯粹是理论上的)。 我的问题:假设我知道我在做什么(并根据需要修改所有字段),程序是否会正常运行? 或者jvm是否进行了一些依赖于String不可变的优化? 我会遭受性能损失吗? 如果是这样,它会做出什么假设? 该计划会出现什么问题 ps String只是一个例子,除了示例之外,我实际上对一般答案感兴趣。 谢谢!

如何拦截Java中的对象创建低于用户类级别

我正在寻找一些方法,通过使用Java代理或检测类(最好是比用户类更低级别的东西)拦截JVM中的所有对象创建( new或任何替代方法来创建Object),有一个类似的问题 ,它没有’重点关注Java代理或低于检测用户类的东西

为什么要将String编译切换为两个开关

我在编译开关时阅读了JVM规范 ,并对如何编译String上的switch语句感兴趣。 这是我检查的测试方法(JDK1.7.0_40): static int test(String i) { switch (i) { case “a”: return -100; case “45b”: return 1; case “c”: return 2; default: return -1; } } 我希望这个方法可以在string的hashCode上编译成简单的lookupswitch,但突然之间 static int test(java.lang.String); Code: 0: aload_0 1: astore_1 2: iconst_m1 3: istore_2 4: aload_1 5: invokevirtual #6 // Method java/lang/String.hashCode:()I 8: lookupswitch { // 3 97: […]

测量JVM中GC的时间

假设我正在测试Java服务器应用程序。 我知道完成测试需要多长时间。 现在,我想知道在测试期间在GC上花了多少钱。 我该怎么做?

有什么方法可以“重启”JVM?

有没有办法重启JVM? 就像在实际上不退出,但关闭并重新加载所有类,并从顶部运行main?

如何调查JVM崩溃的原因?

一天前,经过几个月的正常工作,我们的java应用程序偶尔会崩溃并出现以下错误: # # A fatal error has been detected by the Java Runtime Environment: # # Internal Error (safepoint.cpp:247), pid=2075, tid=140042095163136 # guarantee(PageArmed == 0) failed: invariant # # JRE version: 6.0_23-b05 # Java VM: Java HotSpot(TM) 64-Bit Server VM (19.0-b09 mixed mode linux-amd64 compressed oops) # An error report file with more information is […]

减小JRE的大小

我们将Java 6 JRE与我们的应用程序安装程序捆绑在一起,以便它可以在任何机器上运行,但这会使应用程序变得更重一些。 所以我们计划减少JRE的规模。 如果有人做过这类任务,你能否提供指导以推进这项工作?

在Windows 7上,Java JVM如何设置“user.home”系统属性?

我正在使用JRE 1.7,我发现user.home系统属性非常不寻常。 JVM如何设置此值?

了解JVM内存分配和Java内存不足:堆空间

我正在研究真正了解内存分配在JVM中的工作原理。 我正在编写一个应用程序,其中我正在使用内存:堆空间exception。 我知道我可以将诸如Xms和Xmx之类的VM参数传递给JVM为正在运行的进程分配的堆空间。 这是问题的一种可能的解决方案,或者我可以检查我的代码是否存在内存泄漏并解决问题。 我的问题是: 1)JVM如何为自己实际分配内存? 这与操作系统如何将可用内存传递给JVM有何关系? 或者更一般地说,任何进程的内存分配如何实际工作? 2)虚拟内存如何发挥作用? 假设您有一个具有32GB物理内存的系统,并且您将所有32GB分配给您的Java进程。 假设您的进程实际上消耗了所有32GB内存,我们如何强制使用虚拟内存而不是运行到OOMexception? 谢谢。

在运行时更新JAR

如果jar在JVM中运行,则可以卸载当前运行的Jar并将其从系统中删除。 下载新版本并使用与最后一个Jar相同的名称重命名它,然后初始化新的Jar,在JVM中创建Jar的无缝更新。 甚至可以指示JVM执行此操作吗? 甚至可以在运行时更新Jar吗?