目录
1.不可变对象对并发应用的作用
不可变对象:对象一旦被创建,它的状态(对象属性值)就不能改变;如String、包装类等
作用:不可变对象由于状态无法改变,因此永远是线程安全的
2.Java中的线程调度算法
线程调度:按照特定机制为多个线程分配CPU的使用权,由JVm负责进行线程调度
调度模型:
分时调度模型:线程轮流获得CPU的执行权,平均分配每个线程占用的CPU时间片
抢占式调度模型:优先让运行池中优先级高的线程使用CPU,若优先级相同,则随机选择一个线程;处于运行状态的线程会一直运行下去,直到执行完毕
3.线程组与线程池的区别
线程组:ThreadGroup类;将线程归属到某个线程组中,方便管理线程
线程池:为了减少创建于销毁线程的开销,使线程得到复用
4.Java中是否会存在内存泄漏
尽管Java的健壮性使得Java能够较为安全的管理内存,并且具有垃圾回收机制回收资源,但若在程序编译过程中出现明显问题还是会导致内存泄漏情况的发生,比如无限制的创建野线程
5.Serial和Parallel两种GC机制的区别
Serial GC(Garbage Collection):是一种单线程的垃圾回收器,回收效率低,用户等待时间长
Parallel GC:是一种多线程的垃圾回收器,回收效率高,用户等待时间短
6.Java中弱引用与软引用的区别
WeakReference-弱引用:弱引用的生命周期更短暂,一旦被垃圾回收机制扫描到只具有弱引用的对象,无论内存占用如何,都会被回收
SoftReference-软引用:对象只具有软引用,若内存足够,则不会被垃圾回收器回收;内存空间不足时才回收该对象
7.32位和64位JVM的最大堆内存分别是多少
在理论上,32位JVM的堆内存可以达到2的32次方,即4GB;64位JVM的堆内存可以达到2的64次方。然后实际中不同操作系统的堆内存,都会比最大堆内存小。
8.JDK、JRE、JVM、JIT分别是什么
JDK(Java Development Kit):Java开发工具,比如Java编译器;jdk=jre + Java的开发工具
JRE(Java Runtime Enviroment):Java运行环境;jre=jvm + Java的核心类库
JVM(Java Virtual Machine):Java虚拟机,用来运行Java应用
JIT(Just In Time Compilation):即时编译,当代码执行的次数超过一定阈值时,会将Java字节码转换为本地代码,从而提高Java应用的性能
9.如何获得Java程序使用中的内存
使用java.lang.Runtime类中与内存相关的方法获取剩余的内存,总内存和最大堆内存;调用Runtime.freeMemory() 方法返回剩余空间的字节数,Runtime.totalMemory()方法返回总内存的字节数,Runtime.maxMemory() 返回最大内存的字节数
10.Java的内存区域
线程私有区域:程序计数器、虚拟机栈、本地方法栈
线程共享区域:Java堆、方法区
直接内存