大家好,今天小编关注到一个比较有意思的话题,就是关于java语言原理的问题,于是小编就整理了3个相关介绍Java语言原理的解答,让我们一起看看吧。
编程语言的底层原理?
底层原理
J***a程序编译到运行需要经过将.j***a后缀的文件通过j***ac命令编译成.class文件(此时与平台无关),然后将对应的.class文件转化成机器码并执行,但是由于不同平台的JVM会带来不同的“翻译”,所以我们在J***a层写的各种Lock,其实最终依赖的是JVM的具体实现和CPU指令,才能帮助我们达到线程安全的效果。
如何理解j***a语言?
j***a语言就是一门编程语言,用来解决现实当中各种复杂的业务逻辑问题。
J***a 在特定情况下解决了特定平台间的跨平台问题,解决方法是把 J***a 本身做成一个平台。然后,只要把 J***a 平台本身部署到目标机器,那么应用理论上就可以用了,这个方法对不同 fl***or 的 Unix 系统之间的程序移植带来了很多好处。——这所有的好处都来自服务器领域。——J***a 虚拟机把这些「型号不同但实质上等价」的服务器虚拟成一致的。但 J***a 无法解决那些「实质上就不一样的设备」之间的兼容性。
J***a 最初的目标,甚至都不是为了把 Windows 移植到 Linux,而是为了让不同 fl***or 的 Unix 之间能够做到二进制兼容。但无论如何,不同的 Unix 本质上都是 Unix,他们之间实现二进制兼容相对比较现实。但诸如 Linux/Windows/OSX 这样本质区别很大的平台,二进制兼容很大程度上只是过于美好的幻想。他们在一些系统核心调用方面可能存在完全不同的机制,以至于你为了选择一个所有系统可用的方式必须牺牲最优效率。
百度搜索圈T社区(***.aiquanti***) 免费视频教程
J***a 本身是一种面向对象的语言,最显著的特性有两个方面,一是所谓的“书写一次,到处运行”(Write once, run anywhere),能够非常容易地获得跨平台能力;另外就是垃圾收集(GC, Garbage Collection),J***a 通过垃圾收集器(Garbage Collector)回收分配内存,大部分情况下,程序员不需要自己操心内存的分配和回收。
JRE,也就是 J***a 运行环境,包含了 JVM 和 J***a 类库,以及一些模块等。而 JDK 可以看作是JRE 的一个超集,提供了更多工具,比如编译器、各种诊断工具等。
jvm是如何实现的?
编程语言和自然语言类似,都是为了交流,自然语言用于跟人交流,程序语言则用于指示机器。jvm其实也就是一个程序,这个程序能接受你的J***a代码,然后根据你的意愿执行一系列操作。举个例子,你可以写一个这样的程序,这个程序接受用户输入一句话,如果用户输入“beep”则调用机器的鸣叫,如果用户输入“exit”,则关掉本程序。在这个例子中,其实用户写的“beep”和“exit”就充当了程序语言的角色,只不过这门语言过于简单因此不可能普及。而j***a则具有完善的体系能够支持你表达任何意愿,然后jvm理解你的j***a语言并执行相应操作,这就是程序语言的原理。当然j***a还有优化的方案,它的编译器将你的j***a语言翻译成字节码,因为jvm执行字节码的速度比直接理解j***a代码要快很多,后来的版本还引入了JIT技术,实时将字节码再编译成机器码,这样就能让机器直接执行指令而不需要jvm去解释。至于垃圾收集器,就是jvm维护着每一个对象的引用(可以理解成C++里面的[_a***_]),根据一定的算法判断其是否可达,如果这个引用不可达(也就是程序的后续部分已经无法获取这个引用,比如说已超出block范围了)那么就清除这个内存对象。这样的好处是能避免由于程序员的疏忽引起的内存泄露,缺点是内存的清理不够即时,因而无用的对象常常会占据内存很长时间。你也可以在C++里实现垃圾回收器,思路是写一个用于管理内存的类,然后程序里不再用new来新建对象,而是用这个类来产生对象,类内部拥有这个对象的指针,并在适当的时候delete它,这样就实现垃圾自动回收了,当然要写这样一个类是很困难的事。
到此,以上就是小编对于j***a语言原理的问题就介绍到这了,希望介绍关于j***a语言原理的3点解答对大家有用。