• Ubuntu下GCJ的使用


    最近在看重构,里面有一些java的代码,想了一下,其实之前好像也正而八经地看过一阵吧。。。所以就顺手起来,运行一下,以更好地了解现在的书的的内容。。

    在ubuntu 1004下,我下了gcj,

    发现还是一系列gcc系列的思维,不过不错。。比较适合我单纯用把java用来练手的。。。

    可以在ubuntu中

    sudo apt-get install gcj-jdk

    来安装

    下面是编译命令(记得要输入主类名)

    $ javac TestT.java
    $ gcj -g --main=TestT -o TestT TestT.class
    $ gdb TestT

    下面是转自一网友的关于gcj 的一些基本知识。

    from http://hi.baidu.com/ssyuan/item/bf1fb0c2613f1147a9ba94c9

    Ubuntu下GCJ的使用

    GCJ是一个好东西
    还是比较喜欢IBM的developerworks的文档风格,讲述一个技术文档,先是简单描述一下相关的术语和技术背景,然后基本的思路是为什么要用它?怎么去用?最后会遇到什么问题(一般会指出它的不足)?提供完整的实例,并详细描述测试环境,结尾提供参考文档。很好,很强大。希望我也能够按照这样的风格写技术类文档。但是有时候真的很懒。哎,天下事,难而废者十之一,惰而废者十之九。言归正传:

    什么是GCJ?

    GCJ(GNU Compiler for the Java Programming Language, GCJ)是多元的,高效的,具有前瞻性的java编译器。它可以编译java源代码,将java字节码转换成本地机器代码。目前支持的java版本最高1.5,最新的1.6还不支持。

    为什么要用GCJ?


    速度不是唯一的理由。他强大的分析工具,作为服务器开发的利器。他产生于JVM蜗牛时代,但今天的JVM已经不可同日而语了。

    那么在linux里面怎么用GCJ呢?

    如果你的linux是ubuntu的话,那恭喜你,这个过程太easy了。
    首先安装GCJ,默认是没有安装的。所以我们需要打开“新利得软件包管理器”,然后搜索GCJ,如下图所示:
    然后在gcj上面右键选择“标记以便安装”,下来会提示相关的几个包,默认就行,应用即可。大约50多兆,下载完自动安装。倒杯水回来ok。在新开一个终端窗口里面,敲入gcj,如果出现“gcj: 没有输入文件”。说明安装成功。用gcj -v 显示版本信息。我的显示是:

    使用内建 specs。
    从 /usr/lib/gcc/i486-linux-gnu/4.2.3/libgcj.spec 读取 specs
    将 spec startfile 重命名为 startfileorig
    将 spec lib 重命名为 liborig
    目标:i486-linux-gnu
    配置为:../src/configure -v --enable-languages=c,c++,java --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --with-gxx-include-dir=/usr/include/c++/4.2 --program-suffix=-4.2 --enable-clocale=gnu --enable-java-awt=gtk --enable-gtk-cairo --enable-plugin --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.2-1.5.0.0/jre --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --disable-libmudflap --enable-targets=all --enable-checking=release --build=i486-linux-gnu --host=i486-linux-gnu --target=i486-linux-gnu
    线程模型:posix
    gcc 版本 4.2.3 (Ubuntu 4.2.3-2ubuntu6)

    OK,安装成功(ubuntu的却强大!)。

    GCJ的使用
    下面简单举几个例子,说明GCJ的使用。深入的功能俺也是正在学习。
    1、用gcj生成可执行文件,eg:
          gcj -o test --main=Test Test.java
          -o 是生成可执行文件
          --main 是指定main方法所在的类,一般是多个文件有连接的时候
          Test.java是事先用vi编辑的java类。
         这样就生成一个可执行的文件:test,但发现大小明显比class文件多了一倍多。
         然后在命令提示符下执行./test ,结果跟java Test 一样
    2、用gcj生成java字节码class
       gcj -C Test.java 
    即可生成Test.class文件    
       再用javac编译一个,以便比较。用ghex(需要另外安装,一个linux下的十六进制编辑器)打开两个class文件比较,都是CAFEBABE开始,0002001C结尾。没有区别。
    3、用gij执行java字节码
       gij Test 或者 gij -verbose Test 效果跟java Test /java -verbose Test 效果一下,只是gij的包不一样,例如 gnu.java.security, gnu.java.net 
    4、垃圾回收器的分析工具
        用gc-analyze分析,先需要生成内存堆栈的文件。可以用gnu.gcj.util.GCInfo.enumerate(String namePrefix)这个方法,比如:
    import gnu.gcj.util.*;
    import java.util.*;

    public class GCDumpTest
    {
    public static void main(String args[])
    {
    ArrayList<String> l = new ArrayList<String>(1000);

    for (int i = 1; i < 1500; i++) {
    l.add("This is string #" + i);
    }
    GCInfo.enumerate("TestDump");
    }
    }
    这是GCJ官网上的例子,但是原来的是 static public..,不知是何意?还是手误。
    这样就生成TestDump001 和TestDump001.bytes的两个文件。
    然后执行:
     
    gc-analyze -v TestDump001 但显示的信息太多,最好还是重定向到一个文件,然后打开慢慢研究。
    gc-analyze -v TestDump001 >dump.txt
    信息比较庞大,俺还没有看完呢。

    今天先到此,待续ing

    参考文档:
    GCJ官方网站: http://gcc.gnu.org/java/index.html
  • 相关阅读:
    HTML <input> 标签的 maxlength 属性
    HTTP 方法:GET 对比 POST
    怎么在html页面和js里判断是否是IE浏览器
    一行神奇的javascript代码
    c# 数据库批量插入数据SqlBulkCopy 示例
    c# 多线程调用窗体上的控件 示例
    sqlserver查找使用了某个字段的所有存储过程
    SQL Server 数据库性能优化
    SQL语句的执行过程
    Sql Server- 性能优化辅助指标SET STATISTICS TIME ON和SET STATISTICS IO ON
  • 原文地址:https://www.cnblogs.com/vimmer/p/2651425.html
Copyright © 2020-2023  润新知