자바 컴파일러 (JAVA Compiler)에대해...

dummy999의 이미지

저는 자바를 좋아하는편입니다.
그런데 자바컴파일러는 개인적으로 맘에안듭니다.
바이트코드니 뭐니해서 호환성높이는건 좋은데 네이티브 코드를 만들수없는것같다는게 아쉽습니다.

자바라는것도 사람들취향에따라. 코딩자체를 즐기는사람도있고
바이트코드를 즐기는 사람도있을껀데..
그것은 취향에따라. 존중할수잇는 언어가되었음 합니다.

누군가그러더군요.. 자바로도 네이티브 코드를 작성할수있다고 하던데..
만들수있었음 좋겠네요..
저는 자바코딩에대해서는 상당히 선호하는 편입니다.

네이티브 코드, 중간코드, 기계코드뜻 ::
http://kin.naver.com/browse/db_detail.php?d1id=1&dir_id=101&docid=365800

ted78의 이미지

이미 꽤 오래전부터 실행시 JVM을 경유하여 내부적으로 네이티브 코드로 변환됩니다.

자바소스로부터 네이티브 코드로 바로 컴파일하는 방법은 실제로 많은 시도가 있었습니다. 실제로 지금까지 이루어지는지는 모르겠구요. 자바의 속도는 초창기에 보여준 그것들과는 많이 빨라졌고 거의 네이티브 코드 수준이라고 해도 과언이 아닙니다. 이유는 위에 말씀드린대로구요...

나는 생각하는 갈대다?

다크슈테펜의 이미지

이글을 한번 참고 해보시는 것도 좋을 것같습니다.
http://www03.zdnet.co.kr/techupdate/lecture/java/0,39024992,10035776-1,00.htm

지디 닷넷에 있는 강좌 자료로 네이티브 자바에 관련된겁니다.(JNI관련)
자바와 C,C++과 연동시키는 법입니다.
자바 혼자서 짜는 거는 아니지만 자바 관련 네이티브 코드를 사용합니다.
그래픽 유저 인터페이스는 SWT로 구성하시면 될듯합니다만...

인생이란게 다 그런게 아니겠어요....? 뭘(?)
http://schutepen.egloos.com

warpdory의 이미지

IBM 의 jike 컴파일러 등을 쓰면 네이티브 잘 만들어집니다.

성능은 OS/2 4.0 버전 에 깔리는 TCP/IP 4.3 버전 이상 또는 eCS 1.1 이상 버전의 네트웍 관련 부분들이 자바로 되어 있는 것을 보면 잘 알 수 있습니다. 그리고, 같은 코드로 AIX 에서도 AIX 네이티브로 짜서 잘 돌아갑니다. (OS/2 TCP/IP 4.3 문서를 읽다보면 AIX 에서 짠 걸 OS/2 에서 jike 로 컴파일해서 네이티브로 돌린다라는 말이 나옵니다.)

이것은 1998년도에 되는 것을 제가 확인 했던 거니깐 지금부터 무려 6년전 얘기군요.


---------
귓가에 햇살을 받으며 석양까지 행복한 여행을...
웃으며 떠나갔던 것처럼 미소를 띠고 돌아와 마침내 평안하기를...
- 엘프의 인사, 드래곤 라자, 이영도

즐겁게 놀아보자.

mr.lee의 이미지

아마 자바의 깔끔한 OOP 인터페이스를 매우 좋아하시는분 같으시군요.

저도 자바 좋아합니다. C/C++ 다 좋아하고 프로젝트에 고루 사용하지만, 매우 설계가 잘 되어 있는(아름다운?) 언어라고 생각하지요.

C++이(의 개념이) 있었기에 자바가 탄생할 수 있었다고 봅니다. 그런면에서 보면 C시절에 C++을 탄생시킨 스트룹 아저씨는 참 대단한 발상가인듯합니다. 물론, 그 시절에 OOP에 대한 논의들이 계속 이어져왔기에 그 연속선상에서 탄생하였다고 볼 수 도 있겠지만요.

여튼, 사족이었구요.

자바는 네이티브 코드를 만드는것이 아니라 만드는것이지요. '한번 작성으로 모든곳에 사용한다' 그게 자바의 철학이니깐요. 그 필요에 의해서 탄생된 개념이 바이트코드니깐요. 아마 질문자님께서도 알고 계실거라고 사료됩니다. 아마두, 자바같은 문법으로 코딩하면서 바이너리를 만들고 싶다는게 요지이실겁니다.

위에분들이 말씀하신것처럼 VM은 비약적인 발전들을 하고 있지요. 이제 실행타임만 비교한다면 C++에 비해 크게 떨어지진 않습니다. Java는 Specification이며, 그것을 만족하는 java compiler는 여러 회사들이 만들어 왔고, 만들고 있습니다. 컴파일러마다 조금씩 성능차이는 있겠지요. 예전에 다른 javac에서는 코드중 일부분을 바이너리로 만드는 기법들이(jike라고 했었던가? 기억이 잘 안납니다) 들어가있었습니다. 아마도 내부적으로는 JNI를 사용한것처럼 바이트와 바이너리를 만들지 않았나 싶습니다. 요즘은, 그 기법들이 보다 더 발전하고 있습니다. Sun jdk에서는 hotspot 이라는 기술을 사용합니다. 그래서, 최대한 효율적으로 바이너리와 바이트를 적절히 동적으로 구사하게 한다고 합니다. 자세한 내용은 java.sun 에서 hotspot을 치면 나올것입니다. 저도 간략하게 훝어봐서 정확히는 기억이 안나는군요.

그리고, 자바로 작성하고 완벽한 바이너리를 얻고싶으시다면 GCJ 를 사용하시면 됩니다. 이클립스처럼 GUI적이고 큰 프로그램도 GCJ로 바이너리화 할 수 있습니다. 물론, 준비과정들이 좀 필요하겟지만요.

허나, 웬만한 프로그램에선 그대로 사용하셔도 크게 지장이 없으실거라고 생각됩니다.

dummy999의 이미지

자바를 네이티브코드로 만들려는 이유는 몇가지로 요약할수있습니다.

첫번째는 다른 컴파일된 실행파일들과 같은레벨에서 관리하고싶어서이고
두번째는 속도때문입니다.
세번째 바이트코드를 실행하는데 상당히 긴 문장을 써야하기때문에
(물론 배치파일을 쓰면되지만)이기도합니다.

여튼 이런저런이유때문에 네이티브 코드를 선호합니다.

------------------------------------
F/OSS bless you... ^^*

익명 사용자의 이미지

http://www.excelsior-usa.com/jet.html

gcj 처럼 오프소스는 아니지만..

졸곰의 이미지

dummy999 wrote:
자바를 네이티브코드로 만들려는 이유는 몇가지로 요약할수있습니다.

첫번째는 다른 컴파일된 실행파일들과 같은레벨에서 관리하고싶어서이고
두번째는 속도때문입니다.
세번째 바이트코드를 실행하는데 상당히 긴 문장을 써야하기때문에
(물론 배치파일을 쓰면되지만)이기도합니다.

여튼 이런저런이유때문에 네이티브 코드를 선호합니다.

첫번째와 세번째의 경우라면 jar로 묶인 놈을 실행해주는 런쳐 어플리케이션을 만들어서 배포하시는건 어떨까요? :D

Running in the 90's
http://spbear.com

dummy999의 이미지

아앗.. 또하나의 이유가있습니다.
아마도 이게 가장결정적이지않을까싶은데..
JRE가 없는데서 해보고싶습니다.
설령 자바의 특징이 다죽더라도..
빠른 자바 작은 자바를 해보는게 소원입니다. ㅠ.ㅠ

그들이 아무리 자바가 작다고해도 제눈엔 엄청난 덩어리이고..
그들이 아무리 자바가 빠르다고해도 제눈엔 손수레와 같습니다.
걍.. 개인적인취향이 그렇습니당..
JRE가 나쁜거같진않아요 ^^;;;;;

------------------------------------
F/OSS bless you... ^^*

이한길의 이미지

빠른 속도를 위해 네이티브 코드로 변환하려 한다면...
조금 다시 생각해보시는 게 좋겠습니다.

제가 한때 GCJ를 잘 활용해보려고 많은 노력을 했었습니다...
여기 글 뒤져보면 제가 GCJ그룹을 만들어보겠다고 한 글도 있습니다.
결국 활성화되지 못하였고 그냥 문 닫았습니다만...

IBM의 기사들을 찾아보면...
네이티브 코드로 변환해도 JRE로 실행한 경우보다
빠르지 않다는 결론을 내려주고 있거든요. 어떤 기사인지 잘 생각나지 않으나
몇몇 네이티브 코드를 만들어주는 컴파일러들을 비교했던 자료가 있었습니다.

그리고...

GCJ를 사용하려면 사용할 라이브러리를 다시 작성할 필요가 어느정도 있습니다.
제가 해보니 JAVA API를 어떤 패키지는 1.3을 따르고 어떤건 1.4를 따르고..
또 없는 것도 있고 하더군요. 아무튼 갈길이 멉니다... ^^*

마지막으로는...
http://wiki.kldp.org/wiki.php/GCJ

여길 참고하세요. 제가 쓴 글인데... 저번에 KLDP가 날라가면서...
그 후에 모든 자료를 정리해서 올린 그것이 없고...
그 전의 간단한 것만 남아 있네요..

혹 도움이 되시길...

----
먼저 알게 된 것을 알려주는 것은 즐거운 일이다!
http://hangulee.springnote.com
http://hangulee.egloos.com

dummy999의 이미지

그렇다면 자바가 필요한이유를 모르겠군요..
꼭 런타임엔진이 필요하다면 자바에는 절때적으로 속도와 용량은 기대해선안될듯..
차라리 예전에 봤던 D언어가 더 좋지않을까라는 생각이 듭니다...
그건 어떤사양인지모르겠지만 적어도 런타임엔진이 필요하진않을듯합니다만..

아이 그냥 안쓸렵니다.. -_-;;;;
좋아서 또 조금 배웟기때문에 쓸라고했는데
나뻐서 나머지 전부를 몰라서 못쓰는꼴이 되버렸군요..

------------------------------------
F/OSS bless you... ^^*

다크슈테펜의 이미지

자바는 한번 작성하면 수정없이 다른 곳에서도 실행된다는 장정이 있지 않나요...? 그게 강점이라고 생각합니다.
차라리 네이티브 코드를 작성한다면 c,c++로 작성하는게 좋을 듯하네요..
윗분들 말씀대로라면...

인생이란게 다 그런게 아니겠어요....? 뭘(?)
http://schutepen.egloos.com

이한길의 이미지

참고하세요... 오늘 시간이 좀 있어서 찾아봤습니다....

http://www-903.ibm.com/developerworks/kr/java/library/j-native.html

위 링크에서 따라가 보면 혹... 또 쓸만한 글이 잇을지 모릅니다.

----
먼저 알게 된 것을 알려주는 것은 즐거운 일이다!
http://hangulee.springnote.com
http://hangulee.egloos.com

voider의 이미지

java는 임베디드 플랫폼을 위해 처음 디자인 된걸루 알고 있습니다.
그쪽 세계가 원래 무지 다양한 플랫폼이 산재해 있기 때문에 중간 코드 같은
개념이 프로그래머들 사이에 요원 했겠죠..

그런데 실제로 해보면 아무리 하드웨어 성능이 올라가도 언제나 목마르기
마련입니다.
그래서 성능에 칼을 대면서 VM 같은것을 사용하는것이 웬지 개발자 입장에서는
먼가 껄끄럽죠...

-- 아쉬운 하루 되세요 --

sunyzero의 이미지

리얼타임성격이 강한 정도가 아니면 지금의 성능도 못봐줄 정도는 아니라고 봅니다. 충분한 성능이 나오고 있지 않나요? 1.2, 1.3, 1.4 로 계속 변해가면서 꾸준히 속도도 올라갔죠.

그리고 무엇보다 자바는 사실상 매우 매력적인 언어죠. 객체지향 개념도 충실하고.
배우기가 깔끔한데다가 플랫폼 독립적인 특징으로 많이 사랑받고 있죠.

나중에 자바가 네이티브코드로 방향전환해야 한다면 그건 자신의 장점을 막고, 단점에 올인하는것이 될겁니다. 만일 빠른 속도를 요한다면 차라리 C 로 제작하는 것을 생각는것이 좋을지도 모릅니다.

========================================
* The truth will set you free.

ㅡ,.ㅡ;;의 이미지

dummy999 wrote:
자바를 네이티브코드로 만들려는 이유는 몇가지로 요약할수있습니다.

첫번째는 다른 컴파일된 실행파일들과 같은레벨에서 관리하고싶어서이고
두번째는 속도때문입니다.
세번째 바이트코드를 실행하는데 상당히 긴 문장을 써야하기때문에
(물론 배치파일을 쓰면되지만)이기도합니다.

여튼 이런저런이유때문에 네이티브 코드를 선호합니다.

C/C++ 로 하시면 되죠...
java 보다 훨씬 강력하기도하구요.


----------------------------------------------------------------------------

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.