我有一个C++代码,在执行时:加载JVM(我完全控制如何加载JVM),并使用CJNI代码调用Java方法(从加载的类)。Java代码没有Main(),它实际上不是标准的Java应用程序。主要是编译压缩成Jar文件的静态代码,由C++模块调用。是否可以分析由YourKit执行的Java代码(有许可证)?如果是这样,我会很高兴知道如何做。 最佳答案 我会把它丢给希望分析Java的C++人员:Java有一个很棒的可视化分析器,它可以自动连接到称为VisualVM的JVM。它包含在jdk中。在这里查看:http://visualvm.jav
我有一个包含遗留C代码的dll,我通过JNI调用这个dll,但有时C代码崩溃并导致JVM终止。有没有办法避免JVM崩溃?我可以处理JNI故障并让JVM存活吗?:) 最佳答案 正如Timo所说,您别无选择,只能使JNI代码健壮。如果您不能这样做(例如,如果您没有源代码),那么也许您可以寻求进程间解决方案。将JNI代码放在一个单独的服务器进程中,进行RMI或HTTP调用。如果它崩溃了,请重新启动“服务器”,但主JVM仍然存在。显然会有性能开销和复杂性增加,但也许您可以负担得起? 关于java
如何更新OpenJDK的时区信息?Oracle推出了tzupdater,但它受其许可的约束,所以我不想使用它。我正在寻找一种开源替代方案,它允许我只更新时区信息而不是整个JRE。 最佳答案 Azul最近发布了一个更新TZ数据的开源工具:https://www.azul.com/products/open-source-tools/ziupdater-time-zone-tool/它的工作原理类似于Oracletzupdater,但具有开源(GPLv2许可)许可。用法:将其应用到您要更新的使用Java的IANA数据包:$JAVA_HO
我刚刚安装了OpenJDK,正在全新安装Ubuntu:OpenJDK64-BitServerVM(build19.0-b09,mixedmode)onUbuntu64bit10.10不确定这是否相关,但我在VMWareFusion中运行它。下面一行:javax.net.SSLContext.getDefault();//sameasgetInstance("Default")throwsthefollowingexception:java.net.SocketException:java.security.NoSuchAlgorithmException:DefaultSSLConte
我的Android应用程序的C代码中有一个复杂的结构,我想在Java端使用它。我用谷歌和stackoverflow做了一些研究,所以我从我的C结构创建了java类,但现在如何在Java中获取它。我找到了这些信息,关于在类中创建指针并在C端使用它:GetthefieldID:(*env)->GetFieldID(...)Getthepointer:(*env)->GetLongField(...)Setthepointer:(*env)->SetLongField(...)但我不明白它到底是如何工作的......在上面,您可以找到我到目前为止所做的事情……没那么多!在C端:Complex
我正在使用JNI调用一个静态java方法,该方法又创建一个SwingJFrame并显示它。代码相当简单,Java代码独立运行(即javaStartAWT做它应该做的事),而当使用JNI从C调用时,进程挂起。我在MacOSX10.8MountainLion上使用JDK1.7.0_09。这是我用来调用静态方法的C代码:JavaVM*jvm;JNIEnv*env=create_vm(&jvm);jclassclass=(*env)->FindClass(env,"StartAWT");jmethodIDmethod=(*env)->GetStaticMethodID(env,class,"r
我正在开发一个JavaEE应用程序并将其部署在Glassfish3中。我正在使用Ubuntu12.04、面向EE开发人员的Eclipse和OpenJDK6JDK(包openjdk-6-jdk)。到目前为止没有问题。问题是,无论我在哪里寻找有关使用OpenJDK进行JavaEE开发的信息,我都发现OpenJDK应该只是JavaSE,例如here,或here.不过,在我的应用程序中,我经常使用javax.*,并且可以正常工作。我已经下载了OpenJDK6的源代码,我发现文件夹/jdk/src/share/classes/javax/有很多类,但是缺少一些重要的东西,比如javax.serv
关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭3年前。ImprovethisquestionJavaMissionControl(JMC)宣布从JDK11开始从Oracle移交给开源社区。但是JMC未与OpenJDK11releases捆绑在一起.我读到JMC将单独提供downloadhere,但没有可供下载的版本。此外,Oracle不再提供关于theirpageaboutJMC的下载。.我再也无法在OracleJDK中找到它.源镜像在GitHub但也没有可
按照@tulskiy在这篇文章PassingpointersbetweenCandJavathroughJNI中的建议,我一直在通过JNI在Java中存储c指针。诀窍是将指针转换为jlong。所以从c我有return(jlong)ptr;我要返回一个jlong(总是64位),因为我希望我的代码在64位和32位系统上都能工作。64位计算机上64位指针在内存中的大小为64位,而在32位计算机上,指针在内存中的大小为32位。问题是在32位机器上我收到编译器警告“从不同大小的指针转换为整数”。如果我有,警告就会消失return(jlong)(int32_t)ptr;但是这段代码
我正在使用以下C++代码初始化JavaVM。JNI_CreateJavaVM抛出一个0xC0000005异常,但如果我忽略它仍然会成功。'Jni.exe'(Win32):Loaded'C:\Tools\Java\Jdk8.77x86\jre\bin\zip.dll'.CannotfindoropenthePDBfile.Exceptionthrownat0x02900282inJni.exe:0xC0000005:Accessviolationreadinglocation0x00000000.'Jni.exe'(Win32):Loaded'C:\Windows\SysWOW64\sh