HK

Java

[Java기초]1-2강, JavaVRMachine?

AshBluebird 18 일 전 조회 수 56 추천 수 0

[Java기초]1-2강, JavaVRMachine?

Thread main = new Thread(this"mainThread"); //숙련자를 위한 파트 - JVM의 이해

이제 저희는 마치 기초과학처럼, 굉장히 심오하고 기반적인 면을 다뤄보려합니다.

여러분, 만약 여러분이 이태원 거리를 감성해 취해 (마스크를 쓰고)걷고있을때, 옆에서 외계어를 선보이는스페인 사람이 말을 걸면 어떻게 하시나요? 보통 idk Eng 를 시전하며 런각을 보시는분이 많은데요. 만약 대화할 의향이있다면 저희는 구글 번역기 혹은 파파고를 사용합니다. 이렇듯 프로그래밍 언어 또한, 0과 1로 이루어진 기계어로 바꿔줄 번역기가 필요한데요. 그것이 바로 인터프리터 입니다. 하지만, 스페인어 번역기는 스페인어를 한국어로 번역해줄 수는 있지만 다른 나라의 언어 혹은 사투리는 번역을 잘 못하죠? 그래서 자바에서 고안한것이, 통합적인 하나의 언어로 만든 뒤 다시 기계어로 변환하는 기계, 자바 가상머신과 자바 바이트 코드입니다.


//Description //빌드업과 회수를 동시에!

여러분, 여러분이 계산기 프로그램을 만드려고 합니다. 계산기는 콘솔 창으로 되어있으며, 공학용 연산 또한 수행할 수 있어야합니다.

이를 저급 언어 에서 구현하려면 어떻게 해야할까요?

일단 콘솔창을 불러와야할겁니다. Os에 따라 이름, 확장자 등이 다른데다가 어느정도의 사용법도 다르니 각기 다르게 짜야겠죠. 그 뒤엔 어떻게 해야할까요?

연산을 하기위해 저희는 컴퓨터가 이 프로그램에 어느정도의 자원을 투자할지 "일일히" 계산합니다. 마치 우리가 수필로 가계부를 적듯이 컴퓨터에서 무엇을 먼저 실행시키며 어느정도의 메모리 (RAM = 컴퓨터의 기억을 맡는 부분이라 생각하시면 됩니다.)를 사용할 것 인지 등을 일일히 정해주어야겠죠. 만약 프로그램이 설정한 메모리보다 1바이트 만큼이라도 메모리가 부족하다면 프로그램은 정상적으로 작동되지 못할 것 입니다.


이러한 방법의 단점은 무엇일까요?

"불편함" 입니다. 물론 메모리를 일일히 지정한다면 (만약 천재라면) 그만큼 메모리를 상황에 맞게 효율적으로 분배하는것이 가능하겠지만, 오류가 날 확률도 확연히 높습니다. 그래서 여러분의 카드내역을 자동으로 추적해주는 "디지털 가계부" 가 나왔습니다.

바로 자바 가상머신 JVM(JavaVirtualMachine) 입니다!

자바 가상머신은 여러분이 미처 생각하지 못한 메모리관리를 보편적인 방법으로 대신해줍니다! 또한, 그 어떠한 운영체제(OS) 에서라도 차이가 없이 작동되게 해줍니다!

(여담으로 자바의 철학은 한번의 빌드로 어디서든 쓸수있게! 입니다. JVM이 좋은 예시인듯 하네요)


하지만 여러분, 메모리관리를 대신해주는것은 알겠지만, 운영체제나 환경에 따른 차이가 없이 작동하게 해준다는건 무언가 수상하지 않나요? 결국 0과 1의세계로 가면, 운영체제가 다르면 코드 또한 확연히 다른데 과연 어떻게 차이가 없게 작동되게 할까요?


이에 머기업 자바는 자신들만의 기계어, 자바 바이트코드를 개발하였습니다 .

자바 바이트코드는 자바에서 개발한, 로우레벨의 언어로 JVM으로 불러진뒤(로딩) 특수한 엔진을 통해 해석되어 수행됩니다. 즉,"로우레벨에서의 자바" 정도로 생각하시면 될것같습니다.

읽고 쓰기, 논리연산, 형변환, 객체생성 / 조작, 스택관리, 제어, 함수 호출 및 반환

의 기능에따라 256가지나 되는 명령어가 존재합니다!


q=May+I+need+to+learn+JavaByteCode&oq=May+I+need+to+learn+JBC  //자바 바이트코드를 꼭 배워야 하는가

chrome 의 검색인자 쿼리데이터 URL 표기식

결론부터 말하자면 "없습니다"

자바 바이트 코드는 어셈블리 언어와 유사하며, 그렇기에 기계어에 "굉장히" 가깝습니다. 기능은 심지어 이진수와 1대 1로 매칭이 될 정도이죠. 즉, 배울 경우 좀더 자바에 대한 깊은 이해와, 잘 사용하기만 한다면 훨씬 낫은 성능(최적화)를 지닌 프로그램을 만들 수 있습니다. 하지만 여러분, 저희가 계산기를 만들때 이진수로 코딩하나요? 서버 관리용 프로그램을 짤때 어셈블리어를 씁니까?

단연코 "아닙니다"

그렇기에 자바 바이트 코드또한, 알고있다면 좋지만 "굳이 깊이 알 필요는 없는" 것 이라고 보시면 될 것 같습니다


break;  //마무으리

이번 강의의 숙련자 파트는 분량이 너무 길어, 2개의 강좌로 자르게 되었습니다! 다음시간부터는 드디어 코딩을 할 것 입니다.(다음시간이라 해도 어짜피 바로 올라갈거같네요 ^^) 그럼 모두 !녕~~

! 는 Java에서 부정문으로 쓰입니다



0개의 댓글

제목 글쓴이 조회 수 날짜 추천 수
[프리미엄] [2] [HK] 마인크래프트 개발 디스코드 - 컨텐츠를 만들고 서버 어드민이 되어보자! 5 DC 434 4 일 전 0
[채널공지] 고퀄리티 서버 만들기 안내 DC 82 4 일 전 0
[python] 파이썬 디스코드봇 개발 #2 시간을 출력하는 명령어 만들기 2 DevRuby 99 18 일 전 0
[마크소식] Minecraft Bedrock - Beta 1.16.0.61 DC 46 18 일 전 0
[Java] [Java기초]1-2강, JavaVRMachine? AshBluebird 56 18 일 전 0
[마크소식] Minecraft Java Edition - Snapshot 20w20b 1 DC 112 19 일 전 0
[플러그인 제작] config.yml 만들기 2 브루스 99 22 일 전 1
[서버관리 기술] [네트워크 - DNS] 8.8.8.8 와 같은 DNS서버를 구축하기 보라색구미호 82 22 일 전 0
[커맨드 제작] 엔티티 구별은 태그를 붙여서 해주세요! /tag 7 허두 74 22 일 전 0
[Java] [Java기초]1강, OOP! Java를 자바서 JVM! 7 AshBluebird 62 23 일 전 0
[고퀄공모전] 마인크래프트 1.12.2 룰렛 스크립트 3 마크충 149 27 일 전 0
[스킨제작] 마인크래프트 하이큐 오이카와 토오루 스킨 배포 륜온 66 27 일 전 0
[JavaScript] [ JavaScript 기초강좌 ] 4강 함수 1 lukekeum 111 29 일 전 0
[플러그인 제작] [Paper 1.15 플러그인 만들기] 4.명령어 제작하기 1 choigun08 178 29 일 전 0
[서버관리 기술] [클라우드] 클라우드 서비스 의 정의 보라색구미호 58 2020.05.03 0
[스크립트 기초] 마인크래프트 스크립트 - 아이템 이름 얻는 법! 1 브금소리BGMSound 115 2020.05.02 0
[서버관리 기술] [클라우드] 클라우드 서비스 의 정의 보라색구미호 28 2020.05.02 0
[서버관리 기술] [클라우드] 클라우드 서비스 의 정의 보라색구미호 25 2020.05.02 0
[서버관리 기술] [통합] 시작하기 보라색구미호 46 2020.05.02 0
[데이터팩 제작] [tag 1편]아이템을 구분하는 tag를 추가하기! 2 WintChoco 82 2020.05.02 0
마인크래프트 플러그인 검색하는 노하우! 브루스 97 2020.05.01 0
[마크소식] Minecraft (Bedrock) - Beta 1.16.0.59 DC 84 2020.05.01 0




개발자 최신글
사진이 없습니다.

자유

와;; 화면비 안맞는거 이제 봤네;; 1

ys7

2020-06-02

0

https://www.koreaminecraft.net/files/thumbnails/435/766/001/262x150.crop.jpg
저택같은 기숙사(서버) 2

zoom5699

2020-06-02

1