Tag: jvm

如何获取Windows上未运行在控制台上的Java进程的线程和堆转储

我有一个Java应用程序,我从一个控制台运行,这又是另一个Java进程。 我想获得该subprocess的线程/堆转储。 在Unix上,我可以做一个“杀-3”,但在Windows AFAIK获得线程转储的唯一方法是控制台中的Ctrl-Break。 但这只能给我父母的过程,而不是孩子的转储。 有没有另一种方法来获得堆转储?

运行jmap获取无法打开套接字文件

我必须运行jmap才能获取我的进程的堆转储。 但是jvm返回: Unable to open socket file: target process not responding or HotSpot VM not loaded The -F option can be used when the target process is not responding 所以我用了-F : ./jmap -F -dump:format=b,file=heap.bin 10330 Attaching to process ID 10331, please wait… Debugger attached successfully. Server compiler detected. JVM version is 24.51-b03 Dumping heap to […]

Java – 获取JVM中加载的所有类的列表

我想列出属于某个包裹的所有课程以及他们所有的孩子。 这些类可能已经或可能未被加载到JVM中。

没有抛出VirtualMachineError保证

我从C ++来到Java。 在C ++世界里,我们注意到exception的安全性,并且注意到,在mutator本身或者委托给它的方法(最小,强壮,无丢包)的情况下,mutators可以提供不同的保证。 实现具有强大exception保证的方法要求保证一些基本的操作不会抛出exception。 JLS声明哪些操作可以抛出哪种exception,但是VirtualMachineError错误会出现问题。 JLS : 内部错误或资源限制阻止Java虚拟机实现Java编程语言的语义; 在这种情况下,引发VirtualMachineError的子类的一个实例。 JLS没有多说VirtualMachineError 。 “内部错误”意味着JVM中的一个错误,所以我对这种情况不感兴趣:面对JVM中的错误,所有的投注都closures。 但是“资源限制”情况呢? 是否有任何保证永远不会因为资源限制而失败的操作?

什么是JVM的默认编码?

UTF-8是Java中的默认编码吗? 如果不是,我怎么知道默认使用哪种编码?

增加Java堆大小永久?

有没有一种方法可以在我自己的计算机上设置jvm的默认堆大小? 我想将它设置为1g,因为我总是运行自定义程序,总是以默认的jvm大小达到超龄点。 我只是不想记得键入-XmX1g每次我从命令行运行我的Java应用程序… 必须有一个pipe理的方式来做到这一点的权利?

覆盖Java System.currentTimeMillis以testing对时间敏感的代码

有没有办法,无论是在代码或JVM参数,通过System.currentTimeMillis覆盖当前时间,而不是手动更改主机上的系统时钟? 一点背景: 我们有一个系统,它运行许多会计工作,围绕当前date(即本月的第一个月,第一年等) 不幸的是,许多遗留代码调用函数,如新的Date()或Calendar.getInstance(),两者最终都会调用System.currentTimeMillis。 出于testing的目的,现在我们不得不手动更新系统时钟来操纵代码认为testing正在运行的时间和date。 所以我的问题是: 有没有办法来重写由System.currentTimeMillis返回的内容? 例如,告诉JVM在从该方法返回之前自动添加或减去一些偏移量? 提前致谢!

JVM能否从OutOfMemoryError恢复而不重启

如果在有更多的对象分配请求进来之前有机会运行GC,那么JVM可以在不重启的情况下从OutOfMemoryError中恢复吗? 各种JVM实现在这方面有什么不同? 我的问题是关于JVM恢复,而不是用户程序试图通过捕获错误进行恢复。 换句话说,如果在应用程序服务器(jboss / websphere / ..)中抛出OOME,是否必须重新启动它? 或者如果进一步的请求似乎没有问题,我可以让它运行。

在运行时设置JVM堆大小

有没有办法从正在运行的Java程序设置堆大小?

增加内存密集型应用程序的JVM最大堆大小

我需要运行一个使用超过2GB的Java内存密集型应用程序,但是我有问题增加了堆的最大大小。 到目前为止,我已经尝试了以下方法: 设置-Xmx参数,例如-Xmx3000m。 这种方法在创buildJVM时失败。 从我googlesearch,看起来像-Xmx必须小于2GB。 使用-XX:+ AggressiveHeap选项 。 当我尝试这种方法时,出现“内存不足”的错误,告知堆大小为1273.4 MB,即使我的计算机有8GB的内存。 有没有另一种方法可以尝试增加JVM的最大堆大小? 以下是计算机规格的摘要: 操作系统:Windows 7(64位) 处理器:Intel Core i7(2.66 GHz) 内存:8 GB java -version: java version "1.6.0_18" Java(TM) SE Runtime Environment (build 1.6.0_18-b07) Java HotSpot(TM) Client VM (build 16.0-b13, mixed mode, sharing)