java课题性质_浅谈Java理解,开放性题目浅析

浅析对于JAVA的理解

从接触JAVA到现在,不敢说对于JAVA有多了解,但是也可以算上初窥门径。很多时候,

我们都会碰到一些开放性的面试题,那么在这里我通过这个题目作为一个引子,一起

分析以及解答一下JAVA为什么让我们这么又爱又恨。

为了能够很好的表述这个问题,我会从以下几个方面简述这个问题。当然这个问题太大了,我尽量在保证用词准确的基础上做到有深度,有广度,简单易懂

语言本身特性

JDK包含的常见工具

类加载机制

Write Once,Run anyWhere

语言本身特性:

之所以先聊特性,是因为这个东西比较简单。Java的特性很清楚能够表述清楚:

c556c9cc060b

Java语言特性

java语言的特性,包括泛型,面向对象,泛型,反射,Lamdba等;

也包含了一些基础类库,集合,IO/NIO,网络,并发,安全等基础类库。

JDK包含的常见工具

JDK中包含的常见工具比如:编译器,运行时环境,安全工具,诊断和监控工具等等。

c556c9cc060b

常见工具

接下来是我罗列的这些常见的工具的使用方式,可能比较无聊,大家也可以直接跳过。认识即可。

jar.exe:

作用:生成jar包

jar cvf d:/test.jar e:/review/coreJava/Employee.class

表示将目录e:/review/coreJava下面的Emlopyee.class生成jar文件并存放在d盘下面的test.jar里面。

sjavac:

jdk9之后才有的,这里还有比如辅助工具的jlink也是jdk9之后才有的。

作用: In addition to the timestamps sjavac inspects the public API of the dependencies to judge which files need to be recompiled.。sjava代替了javac时间戳之外,sjavac还会检查依赖项的公共API,以判断哪些文件需要重新编译。感觉和JIT搭配着使用。目前这个先做为一个新的坑,后期填补一下。嘿嘿。

jstack:

作用:针对活着的进程做本地的或远程的线程dump;

jstack [ option ] pid

查看配置信息的java进程id是否dump。

类加载机制

关于类加载机制的内容,目前市面上也很多。这里我列举的深入理解java虚拟机书中对于类加载机制的大致过程:

加载->验证->连接->初始化。

其实关于这一方面,我会在后续着重分享,所以现在先埋个坑。①此处是坑1。

Write Once,Run anyWhere

接下来我们花点篇幅好好研究一下这句话,这也应该是java的核心内容了。

这句话直译过来书写一次,随处运行。通过这句话有几个问题,需要思考一下?

Java是编译型?还是解释型?

jvm跨平台原理简单解析

这里先通过一个小例子说明一下编译型和解释性的区别:

我们可以理解解释型就是同传(同声传译),编译型就是放录音。

c556c9cc060b

简单版本跨平台原理

手绘版的有点粗糙。这里我简单介绍一下一个.java文件到底是如何一步一步做到跨平台的,然后这里会暴露出那些问题,然后java是如何解决这个问题的。

首先通过javac编译成为字节码文件(bytecode),然后不同平台会安装于平台对应的不同的JVM。JVM的类加载器开始加载字节码文件,通过解释器逐行执行解释执行。所以这里就暴露出来一个问题,就是太慢了,本身.java文件已经多了一步编译.class文件的过程,其次现在又有解释执行对应的字节码文件。

所以Java为了解决这一问题,将有些代码和方法是高频使用的和调用的,这些也就是所谓的热点代码,通过JIT(just in time compile)【即时编译器】,编译成为与本地平台相关的机器码。注意这个操作是在运行时将热点代码编译成为机器码,所以这种情景下就不能说是解释执行了,而是编译执行。

当然这里也会出现另一个问题,就是JIT在操作是时比如要做JIT预热等操作,而这些是会一些额外的开销的,jdk9引入了AOT(ahead of time compilation)。这是一种新的编译方式。直接将字节码编译成为机器码,而且新增加了jaotc工具,可以将某个类或者是9中给我提供的模块编译为AOT库。

编译成为机器码

jaotc --output LibHelloWorld.so HelloWorld.class

启动指定

java -XX:AOTLibray=./LibHelloWorld.so,./ HelloWorld.class

备注:

热点代码,或者说JIT是有存在的价值的,因为热点代码编译的设计,是因为绝大多数的

程序都表现了`小部分的热点耗费了大量的资源`。基于这个推论,在某些场景下,一个需要

跑在运行时上的语言,才能比直接编译成为机器码的语言更快。所以有时候我们说Java

在某些情景下要比C还快。

垃圾回收机制

关于垃圾回收机机制,这里埋下第二个坑。

比如常见的垃圾回收器:CMS,G1,ParallelGC等

比如常见的对象引用关系:强、软、弱、虚 之间的关系等等,我们后续在继续分享

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值