Tag: jvm

Grails / Groovy内存泄漏疑难解答?

我有一个Grails应用程序,它做了相当不错的领域对象创建和破坏,它似乎以非常非常快的速度耗尽了PermGen空间。 我做了通常的调整(碰到PermGen到256M,启用了类GC等),但没有骰子。 是否有人愿意推荐一些(并希望免费或非常低成本)工具来解决Groovy和/或Java中的这种内存消耗? 或者您用来解决JVM内存问题的一些技巧? 编辑:这是在生产模式下在Tomcat内部署应用程序的时间; 我没试过其他容器。 即便如此,拥有一些资源来追踪问题会很好。

以编程方式设置max java堆大小

有没有办法以编程方式设置max java堆大小而不是vm参数? 就像是: System.getProperties().put(“”, “1000m”);

跟踪java字节码流

我想看看它正在执行的JVM的当前(字节码)指令流。 经过一些googleing,我发现jvm debug build提供了-XX:+TraceBytecodes选项(见这里 )。 但是,提到的热点JVM调试版本的链接已经死了,我无法在线找到调试版本:/ 有没有其他方法来跟踪jvm字节码流或有人指出我正确的方向? 我正在运行64位ubuntu 16.04。 PS:我知道,打印出完整的指令流会很痛苦。 但是,我很好奇

在Windows 7上运行Eclipse JRE和JDK未找到

我在Windows 7上下载了最新的Eclipse。当我单击eclipse图标时,它会抛出以下exception: 我已经安装了JRE和JDK。 更新:Eclipse.ini内容: -startup plugins/org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar –launcher.library plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.200.v20120913-144807 -product org.eclipse.epp.package.jee.product –launcher.defaultAction openFile –launcher.XXMaxPermSize 256M -showsplash org.eclipse.platform –launcher.XXMaxPermSize 256m –launcher.defaultAction openFile -vmargs -Dosgi.requiredJavaVersion=1.5 -Dhelp.lucene.tokenizer=standard -Xms40m -Xmx512m -vm C:\Program Files (x86)\Java\jre7\bin

来自JNI_CreateJavaVM(jvm.dll)的exception0xC0000005

我正在使用以下C ++代码初始化Java VM。 JNI_CreateJavaVM会抛出一个0xC0000005exception,但如果我忽略它就会成功。 ‘Jni.exe’(Win32):加载’C:\ Tools \ Java \ Jdk8.77×86 \ jre \ bin \ zip.dll’。 无法找到或打开PDB文件。 Jni.exe中0x02900282处抛出exception:0xC0000005:访问冲突读取位置0x00000000。 ‘Jni.exe’(Win32):加载’C:\ Windows \ SysWOW64 \ shell32.dll’。 无法找到或打开PDB文件。 我忘了设置或做某事还是这种“正常”行为? #include #include “jni.h” int main( int argc, char const* args[]) { JavaVM* jvm; JNIEnv* env; std::array options; options[0].optionString = “-Djava.class.path=C:/Users/Thomas/Documents/Visual Studio 2015/Projects/Jni/x64/Debug”; options[0].extraInfo = nullptr; JavaVMInitArgs vm_args; vm_args.version = […]

是否可以指定要使用的JVM(或IDE)的网络接口

情况就是这样,我的macbook pro中有两个网络接口。 一个是静态定义的以太网接口,另一个是DHCP配置的无线接口。 我试图弄清楚如何配置一个特定的java项目只使用我的静态有线接口,而不是简单地通过JVM或我的IDEA(IntelliJ 8)选择列表中的第一个 我已经设法通过vmware实例实现了这个目标,我的虚拟环境仅仅依赖于我的有线接口,但是这个广告性能问题以及在windows / osx之间翻转的一般麻烦。 到目前为止,我一直无法找到一个jvm属性,让我指定使用哪个nic,也没有看到IntelliJ定义的文档。 如果有人对如何尽可能无痛地解决这个问题有任何想法,我将不胜感激。

Java方法调用重载逻辑

对于以下代码,为什么要打印A,B? 我希望它能打印B,B。此外,JVM执行的方法调用是动态还是静态评估的? public class Main { class A { } class B extends A { } public void call(A a) { System.out.println(“I’m A”); } public void call(B a) { System.out.println(“I’m B”); } public static void main(String[] args) { Main m = new Main(); m.runTest(); } void runTest() { A a = new B(); B b […]

避免jvm热身

如果我正在设计排序算法测试,我可以这样做以避免JVM热身吗? 谢谢! double count = 0; double start, end; for(int r = 0; r < warmup; r++) { // do test } for(int t = 0; t < runs; t++){ start = System.nanoTime(); // do test end = System.nanoTime(); count += start – end; } double avg = count/avg

StringBuilder与.concat对比“+”运算符相对性能在eclipse中与命令行不同?

我正在阅读如何在可能的情况下java编译器将编译与“+”运算符连接的字符串编译成StringBuilder的实例,以及如何使用简单的“+”运算符,因为它们编译为相同的代码 。 (除非在while循环中构建字符串,在这种情况下,最好使用StringBuilder。) 我还读到字符串上的.concat方法一直是最糟糕的选择 (以至于Findbugs将它变成了一个bug!)。 所以我决定自己在eclipse中编写一个java类来测试它。 我的结果让我感到有些惊讶。 我发现不同的方法相对更快或更慢,如果我在eclipse中比较并在命令行上运行它们。 首先我的日食结果是: the total millis to concatenate with + was: 12154 the total millis to concatenate with .concat was: 8840 the total millis to concatenate with StringBuilder was: 11350 the total millis to concatenate with StringBuilder with a specified size was: 5611 所以在eclipse中,指定大小的StringBuilder最快,然后是.concat(怪异),那么StringBuilder和“+”串联几乎相同。 但是,我在命令行上的结果是: the total millis to […]

我可以强制生成JVM崩溃日志文件吗?

来自JVM崩溃的日志文件包含用于调试的各种有用信息,例如加载的共享库和完整的环境。 我可以强制JVM以编程方式生成其中一个; 通过执行崩溃它的代码或其他方式? 或者以另一种方式访问​​相同的信息?