标签: jvm

如何锁定已编译的Java类以防止反编译?

如何锁定已编译的Java类以防止反编译?

我知道这必须是互联网上讨论得很好的主题,但在提到之后我无法得出任何结论.

许多人确实建议使用混淆器,但他们只是使用难以记忆的字符序列重命名类,方法和字段,但是敏感的常量值呢?

例如,您已基于基于密码的加密技术开发了加密和解密组件.现在在这种情况下,任何普通的Java人都可以使用JAD来反编译类文件并轻松检索密码值(定义为常量)以及salt,从而可以通过编写小型独立程序来解密数据!

或者这些敏感组件是否应该使用本机代码(例如,VC++)构建并通过JNI调用它们?

java jvm decompiling

90
推荐指数
6
解决办法
8万
查看次数

如何为Junit单元测试设置JVM参数?

我有一些需要大量堆空间运行的Junit单元测试 - 即1G.(他们为仅在足够的堆空间运行的webstart应用程序测试内存密集型功能,并且将在Win 7 64位计算机上内部运行 - 因此重新设计测试并不是一个实用的建议.)

我在Intellij IDEA中开发,所以我知道我可以为测试类设置JVM参数(例如-Xmx1024M).但是,这仅用于运行整个测试类 - 如果我想运行单独的测试,我必须重新创建该测试方法的运行配置.

此外,这些是IDE和特定于盒子的 - 所以如果我切换盒子(我在多台机器上开发)或者我的一个同事试图运行测试,那么这些设置不会被转移.(此外,我的同事也使用其他IDE,如Eclipse和NetBeans.)FWIW,我们使用mercurial进行源代码控制.

对于构建周期,我们使用Maven,所以我知道如何为此指定JVM参数.

所以: - 我正在寻找一种方法来指定适用于整个测试类和各个测试方法的JVM参数; - 我想在任何机器上的IDE之间共享这些规范(从存储库中获取代码).

java junit unit-testing jvm intellij-idea

90
推荐指数
5
解决办法
11万
查看次数

为JVM实现C#

有人试图为JVM实现C#吗?作为一名Java开发人员,我一直羡慕C#,但我不愿意放弃JVM的可移植性和成熟度,更不用说为它提供各种各样的工具了.

我知道JVM和CLR之间有一些重要的区别,但是有什么东西是showstopper吗?

c# java clr jvm

89
推荐指数
5
解决办法
2万
查看次数

什么是环路反演技术?

我正在阅读一篇文档,其中讨论了Java的即时编译器(JIT)优化技术.其中一个是"循环反转".文件说:

while循环替换常规do-while循环.而 do-while循环的中设置if条款.这种替换可以减少两次跳跃.

循环反转如何工作以及它如何优化我们的代码路径?

注意: 如果有人可以用Java代码的例子解释JIT如何将其优化为本机代码以及为什么它在现代处理器中是最佳的,那将是很好的.

java jit jvm machine-instruction

89
推荐指数
2
解决办法
4002
查看次数

Android Studio - 未找到JVM安装

我在尝试启动时遇到问题 Android Studio

当我尝试在安装后启动它时,我收到此错误:

No JVM Installation found. Please install a 64 bit JDK.


我目前的系统规格:

操作系统:Windows 8.0 64 bit version
JDK安装:JDK 1.8.0


我尝试过的:

我已经尝试了错误中报告的内容,并且在大多数解决方案中都将JDK_HOME环境变量中的变量设置为我的JDK路径(64位版本),即C:\Program Files\Java\jdk1.8.0_05

*I also have tried rebooting system, just in case to test if the environment variable is not working without a restart


我已经看过这些解决方案并试过但它们都不起作用,所以不要将它标记为任何这些的副本:
Windows 7上的Android Studio安装失败,没有找到JDK
使用android studio没有找到jvm,JAVA_HOME已经设置了
Android Windows 8上的Studio启动失败64位
Android Studio安装后无法启动


这是java版本的cmd输出:

在此输入图像描述

java android jvm android-studio

89
推荐指数
5
解决办法
24万
查看次数

打印所有JVM标志

找到一个有趣的JVM标志:

java -XX:+UnlockDiagnosticVMOptions -XX:+PrintFlagsFinal -version
Run Code Online (Sandbox Code Playgroud)

它打印了数百种不同的选项,我以前从未听说过.它还会打印默认值,这有助于更好地诊断JVM行为.另一个有趣的标志是:

-XX:+UnlockExperimentalVMOptions
Run Code Online (Sandbox Code Playgroud)

有谁知道任何解释其中每一个的文件?

java printing optimization flags jvm

88
推荐指数
2
解决办法
5万
查看次数

创建JVM编程语言

我在C中创建了一个编译器(使用lex和bison),用于支持循环,函数内部函数声明,递归调用等的动态类型编程语言.我还创建了一个运行编译器创建的中间代码的虚拟机.

我现在正在思考而不是编译到我自己的中间代码,将其编译为java字节代码.

我看到有关创建JVM语言的问题已经被提出,但是我找不到答案非常有用的信息.

所以这是我的问题:

  1. 我想要为JVM创建一种语言,必须阅读JVM规范书,你能提出哪些其他书籍(当然除了龙书)?我主要关注如何创建JVM语言的书籍或教程,而不是一般的编译器.
  2. 有许多Java库可以读取,写入和更改.class文件,如jclasslib,bcel,gnu字节码等.您会建议哪一个?另外,您是否了解执行相同工作的C库?
  3. 我正在考虑看看另一种针对JVM的语言,如Clojure,Jython或JRuby.但是所有这些语言都非常高级且复杂(为它们创建编译器).我正在寻找一个更简单的(我不介意它是未知或未使用的)编程语言,它是针对JVM的,它的编译器是开源的.有任何想法吗?

compiler-construction jvm programming-languages jvm-languages

87
推荐指数
4
解决办法
2万
查看次数

Java:<init>和<clinit>有什么区别?

我无法理解以下文本......这是否意味着<clinit>对于空构造函数?为什么重要的是有两个不同的版本?

https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html

2.9. Special Methods
Run Code Online (Sandbox Code Playgroud)

在Java虚拟机的级别上,每个构造函数(第2.12节)都显示为具有特殊名称的实例初始化方法<init>.该名称由编译器提供.因为名称<init>不是有效的标识符,所以它不能直接用在用Java编程语言编写的程序中.实例初始化方法可以仅通过invokespecial指令在Java虚拟机中调用,并且可以仅在未初始化的类实例上调用它们.实例初始化方法接受从其派生的构造函数的访问权限(第2.7.4节).

类或接口最多只有一个类或接口初始化方法,并通过调用该方法进行初始化(第2.17.4节).类或接口的初始化方法是静态的,不带参数.它有特殊的名字<clinit>.该名称由编译器提供.因为名称<clinit>不是有效的标识符,所以它不能直接用在用Java编程语言编写的程序中.Java虚拟机隐式调用类和接口初始化方法; 它们永远不会直接从任何Java虚拟机inw2struction中调用,但只能作为类初始化过程的一部分间接调用.

java jvm

87
推荐指数
3
解决办法
3万
查看次数

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

我需要运行一个使用超过2GB的Java内存密集型应用程序,但是我遇到了增加堆最大大小的问题.到目前为止,我尝试了以下方法:

  • 设置-Xmx参数,例如-Xmx3000m.这种方法在创建JVM时失败.从我用Google搜索,看起来-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)
Run Code Online (Sandbox Code Playgroud)

java jvm jvm-arguments

84
推荐指数
4
解决办法
35万
查看次数

什么是ReservedCodeCacheSize和InitialCodeCacheSize?

有人能说明一下JVM选项是什么ReservedCodeCacheSizeInitialCodeCacheSize是谁?特别是何时/为什么我要改变它?我如何确定合适的尺寸?

这就是文档所说的:

-XX:ReservedCodeCacheSize = 32m保留代码高速缓存大小(以字节为单位) - 最大代码高速缓存大小.[Solaris 64位,amd64和-server x86:2048m; 在1.5.0_06及更早版本中,Solaris 64位和64:1024m.

java jvm jvm-hotspot

82
推荐指数
2
解决办法
8万
查看次数