编译器本身就是一个应用程序,编译器涉及到底层的一些操作,对执行要求比较高的地方使用汇编语言编写的,主要的还是用c语言来编写实现的,在Java的安装路径下的bin目录下有很多的*.exe可执行文件,像jar.exe、javac.exe、java.exe等等,Java编译器这东西它好像不是开源的,如果你对编译器的实现感兴趣的话,推荐你看一本《编译原理》这本书,这本书对你了解编译器的实现原理有很大的帮助的。

开源就是开放程序源代码。就是把程序源代码发放出来,让程序的用户可以获得。
开源和收不收费没有关系,开源软件同样可以收费。
编程语言本身没有开不开源的问题。开不开源的是把语言编译成可执行程序的编译器或者是执行这种语言写的脚本的解释器软件。
也有编译java的编译器是不开源的。当然,常用的java的编译/解释器都是开源的。
所有常见的编程语言,像C, C++, Basic, Pascal, Php, Python等等都有开源的编译器或解释器。
对自己懂编写软件的语言的用户而言,水平高的可以对软件做修改以满足自己的特殊需要。水平低的可以学习。
因为软件有很多人知道源代码,有问题也容易发现。其它不懂编程的用户也相对放心一点。
对于软件编写者而言,他有可能得到看他软件源代码的高手的指导,别人也可能帮他发现软件中的问题,甚至有人帮他修正源程序中的错误。
而且,如果知道源代码的人比较多,就算他有一天不想继续开发这个软件了,也很容易找到接手的人,这对于用户也是一件好事。