一个是GUN可以可以直接把Java编译成机器码。
一个是JVM内部的优化机制,把经常使用的代码部分直接编译为本地机器码,
JVM其实它自带一个超简易编译器。

解决方案 »

  1.   

    不知道你说的,是不是“混淆”这个概念,如果是,推荐用用proguard(proguard.sourceforge.net)
      

  2.   

    JVM本身就有这样的功能,只不过编译成本地机器码后就不能动态加载了。
      

  3.   

    .class文件转化为机器码 也就是操作系统能直接执行的文件 那就应该是exe后缀 不然操作系统如何执行?
    如果.class文件转化为机器码后依然是.class文件 java虚拟机该如何判断它是字节码还是机器码 如何确定用什么方式执行呢?
      

  4.   


    你可以看看JVM的类加载机制
      

  5.   

    能贴些相关代码实现吗?
    JVM的机制没怎么研究,不知道你说的"超简易编译器"是那个,具体怎么玩呢?
      

  6.   

    能贴些相关代码实现吗? 
    JVM的机制没怎么研究,不知道你说的"超简易编译器"是那个,具体怎么玩呢?
    它一般都是自行优化编译,
    JVM的性能优化不光是GC。
      

  7.   

    这里不是谈混淆,就算混淆也不大好用,要把整个工程都混淆才行,若只混淆单个的.class文件,好像这个类就失效了.不知道是不是这样?
      

  8.   

    http://imgsrc.baidu.com/baike/pic/item/ac75478285acf3b90cf4d213.jpg
      

  9.   

    你说的跟我几乎想到一块去了,但那篇文章确实是说,可以弄成机器码的类文件,以防止被反编译,原文如下:
      我们看到,要在不修改源代码的情况下加密一个Java应用是很容易的。不过,世上没有完全安全的系统。本文的加密方式提供了一定程度的源代码保护,但对某些攻击来说它是脆弱的。
      虽然应用本身经过了加密,但启动程序DecryptStart没有加密。攻击者可以反编译启动程序并修改它,把解密后的类文件保存到磁盘。降低这种风险的办法之一是对启动程序进行高质量的模糊处理。或者,启动程序也可以采用直接编译成机器语言的代码,使得启动程序具有传统执行文件格式的安全性。
      另外还要记住的是,大多数JVM本身并不安全。狡猾的黑客可能会修改JVM,从ClassLoader之外获取解密后的代码并保存到磁盘,从而绕过本文的加密技术。Java没有为此提供真正有效的补救措施。  不过应该指出的是,所有这些可能的攻击都有一个前提,这就是攻击者可以得到密匙。如果没有密匙,应用的安全性就完全取决于加密算法的安全性。虽然这种保护代码的方法称不上十全十美,但它仍不失为一种保护知识产权和敏感用户数据的有效方案。
    ......
    不知道红色部分是不是我理解的意思呢?不是的话,那是什么意思呢?
      

  10.   

    有没有可能它所谓的启动程序就是个exe文件
      

  11.   

    启动程序也可以采用直接编译成机器语言的代码,使得启动程序具有传统执行文件格式的安全性。 JVM的类装载器有安全沙箱,保证只有可信任代码能执行。
      

  12.   

    补充:
    有点困惑,难道就是说弄成exe文件吗?天啦,如果这样的话,web程序如何调用相关class类了?
    可能作者是说se程序吧???
      

  13.   


    那不是以前的J++吗
    或者用现在的Cygwin上的GUN编译java文件
      

  14.   

    其实JIT就是一边编译一边执行的样子,所以今天的Java能运行很快
      

  15.   

    如果能转成机器码,为什么java程序要在虚拟机上运行,在每个操作系统转成机器码后运行岂不是更高效?