Java复习杂记1

1.字节码相关问题

Java是编译与解释共存的语言。JVM类加载器加载字节码文件后,通过解释器逐行解释代码,但这种方式速度较慢,因此,对于热点代码,引进了JIT编译器,JIT属于运行时编译。当JIT完成第一次编译后,会将编译好的机器码保存下来,以便下次直接调用。

关于HotSpot的惰性评估:根据二八定律,消耗大部分资源的往往是一小部分热点代码,而这正是JIT需要编译的部分。如果一段代码频繁的调用方法,或是一个循环,也就是这段代码被多次执行,JIT编译器会参与其中,而如果一个方法从来不被执行,则不会经过JIT编译

字节码文件开头:每一个Java Class文件都是以0x CAFEBABE开头的。

2.变量默认值问题

成员变量如果没有被赋初值,则会以类型的默认值复制(被final修饰的成员变量必须显示赋值),而局部变量不会自动赋值。

原因:成员变量的值存放于堆中,JVM在分配内存时将整块区域置为零即完成了初始化,方便快捷。而局部变量运行时被分配于栈中,量大,生命周期短,如果由JVM完成初始化,将是一笔很大的性能开销。所以java明文规定局部变量必须初始化。

3.Java中只有值传递而没有引用传递

对于对象参数,值的内容是对象的引用。
参考:为什么说Java中只有值传递

4.transient关键字

transient关键字作用:阻止实例中被transient关键字修饰的变量序列化,当对象被反序列化时,被transient修饰的变量值不会恢复。
transient关键字只能修饰变量,不能修饰类和方法。

5.BIO、NIO、AIO、I/O多路复用

同步与异步类似目的,阻塞与非阻塞类似方法。
BIO:同步阻塞I/O模型:服务器实现模式为一个连接对应一个线程,客户端有连接请求服务器就要启动一个线程进行处理,但这个连接如果不做任何事情就会造成不必要的开销。
JDK1.5在BIO的基础上加入了线程池(假的NIO)。
NIO:同步非阻塞I/O模型:线程发起io请求后,立即返回(非阻塞io)。用户线程不阻塞等待,但是,用户线程要定时轮询检查数据是否就绪。IO多路复用模型中,将轮询集中到一个线程中,将检查IO数据是否就绪的任务,交给系统级别的select或poll模型,由系统进行监控,减轻用户线程负担。
AIO:异步非阻塞I/O模型:线程发起io请求后,立即返回(非阻塞io),当数据读写完成后,OS通知用户线程(异步)

6.深拷贝浅拷贝

浅拷贝:对基本数据类型进行值传递,对引用数据类型进行引用传递般的拷贝。
深拷贝:对基本数据类型进行值传递,对引用数据类型,创建一个新的对象,并复制其内容。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值