有没有什么方法可以查看JVM在JVM中生成的本地代码?
我正在运行一个我在Eclipse中用Java编写的程序。 该程序对于非常大的input具有非常深的recursion级别。 对于较小的input,程序运行正常,但是当input大时,我得到以下错误: Exception in thread "main" java.lang.StackOverflowError 这可以通过增加Java堆栈大小来解决,如果是的话,我该如何在Eclipse中做到这一点? 更新: @Jon Skeet 代码recursion遍历一个分析树,以build立一个数据结构。 所以,例如,代码将使用分析树中的一个节点做一些工作,并在节点的两个子节点上调用它自己,结合它们的结果给出树的总体结果。 recursion的总深度取决于分析树的大小,但当recursion调用的数量达到1000时,代码似乎失败(没有更大的堆栈)。 另外我敢肯定,代码不会因为一个错误,因为它适用于小input。
将Java代码构build和编译为32位JDK转换为32位字节代码是否适用于64位JVM? 或者一个64位的JVM需要64位的字节码? 为了给出更多的细节,我有一个在运行32位JVM的Solaris环境中工作的代码,但是现在我在将JDK和Weblogic Server升级到64位后遇到了问题。
线程的上下文类加载器和普通的类加载器有什么区别? 也就是说,如果Thread.currentThread().getContextClassLoader()和getClass().getClassLoader()返回不同的类加载器对象,哪一个会被使用?
我在这个问题上看到了这样一句话: 什么是build立一个Web服务的好的函数式语言? 除了在自recursion函数中,Scala特别不支持tail-call消除,这限制了你可以做的组合types(这是JVM的一个基本限制)。 这是真的? 如果是这样的话,JVM是什么造成了这个基本的限制呢?
可能重复: 奇怪的Java拳击 最近我看到一个演示,下面是Java代码示例: Integer a = 1000, b = 1000; System.out.println(a == b); // false Integer c = 100, d = 100; System.out.println(c == d); // true 现在我有点困惑。 我明白为什么在第一种情况下结果是“假” – 这是因为整数是一个引用types,“a”和“b”的引用是不同的。 但为什么在第二种情况下结果是“真实的”? 我听到一个意见,JVMcaching对象的int值从-128到127为了一些优化的目的。 这样,“c”和“d”的引用是相同的。 有人可以给我更多关于这种行为的信息吗? 我想了解这个优化的目的。 在什么情况下,性能提高等等。参考这个问题的一些研究将是很大的。
我需要检查是否可以传递给JVM的某些选项被显式设置或者是否具有默认值。 更具体地说: 我需要创build一个具有比默认堆栈大小更高的本地堆栈大小的特定线程,但是如果用户想通过指定-Xss选项来自己处理这些事情,我想创build所有具有默认堆栈大小的线程(将被指定由用户在-Xss选项)。 我已经检查了像java.lang.System和java.lang.Runtime这样的类,但是这些并没有给我关于vmargs信息。 有什么方法可以获得我需要的信息吗?
我在Windows 7上启动Eclipse Helios时遇到此错误消息: 无法创buildJava虚拟机 我的eclipse.ini如下所示: -startup plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar -vm P:\Programs\jdk1.6\bin –launcher.library plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.0.v20100503 -product org.eclipse.epp.package.jee.product –launcher.defaultAction openFile -showsplash org.eclipse.platform –launcher.XXMaxPermSize 512m –launcher.defaultAction openFile -vmargs -Dosgi.requiredJavaVersion=1.5 -Xms120m -Xmn100m -Xmx1024m 我的JAVA_HOME被正确设置,据我所知。 我该如何解决这个问题? 目前为止我尝试过的东西: 将完整path添加到javaw.exe -vm P:\Programs\jdk1.6\bin\\bin\javaw.exe 完全删除-vm选项 删除–launcher.XXMaxPermSize解决了这个问题,但它会导致permgen错误 删除–launcher.XXMaxPermSize值512可修复此问题,但会导致permgen错误 将-Xmx减less到512m也解决了这个问题。 为什么我不能使用“1024m”作为“-Xmx”和“–launcher.XXMaxPermSize”?
例如: class A { static int i=0; static int j; static void method() { // static k=0; can't use static for local variables only final is permitted // static int L; } } 这些variables将存储在java(堆栈或堆)中以及如何存储。
如何locking已编译的Java类以防止反编译? 我知道互联网上的这个话题一定是非常好的,但是在提到这个话题之后,我不能得出任何结论。 许多人确实提出了混淆器,但他们只是将难以记忆的字符序列重新命名为类,方法和字段,但敏感常量值又是如何呢? 例如,您已经开发了基于密码的encryption技术的encryption和解密组件。 现在在这种情况下,任何普通的Java人都可以使用JAD来反编译类文件,并轻松地检索密码值(定义为常量)以及salt ,然后通过编写小的独立程序来解密数据! 或者应该用本地代码(例如VC ++)构build这种敏感的组件并通过JNI调用它们?