1. JAVA的垃圾回收机制
JAVA的垃圾回收机制: java提供了一个系统级的线程,即垃圾回收器线程。用来对每一个分配出去的内存空间进行跟踪。当JVM空闲时,自动回收每块可能被回收的内存,GC是完全自动的,不能被强制执行。程序员最多只能用System.gc()来建议执行垃圾回收器回收内存,但是具体的回收时间,是不可知的。当对象的引用变量被赋值为null,可能被当成垃圾。
2. 一般关系数据模型和对象数据模型之间有以下对应关系
3. Java中的工具
- jar ——》将许多文件组合成一个jar文件
- javac ——》编译
- javadoc ——》它从程序源代码中抽取类、方法、成员等注释形成一个和源代码配套的API帮助文档
- javah ——》把java代码声明的JNI方法转化成C\C++头文件
4. 关于包装类
- 无论如何,Integer与new Integer不会相等。不会经历拆箱过程,
- 两个都是非new出来的Integer,如果数在-128到127之间,则是true,否则为false
java在编译Integer i2 = 128的时候,被翻译成-> Integer i2 = Integer.valueOf(128);而valueOf()函数会对-128到127之间的数进行缓存 - 两个都是new出来的,都为false
- int和integer(无论new否)比,都为true,因为会把Integer自动拆箱为int再去比
5. 类的加载
类的加载包括:加载,验证,准备,解析,初始化。
6.加锁机制
- 只对写操作加锁,不对读操作加锁,会造成读到脏数据
- CopyOnWrite的核心思想是利用高并发往往是读多写少的特性,对读操作不加锁,对写操作,先复制一份新的集合,在新的集合上面修改,然后将新集合赋值给旧的引用
- 分段加锁,只在影响读写的地方加锁,锁可以用读写锁,可以提高效率
题目:一个容器类数据结构,读写平均,使用锁机制保证线程安全。如果要综合提高该数据结构的访问性能,最好的办法是分段加锁
7. 将对象序列化
Java在序列化时不会实例化static变量和transient修饰的变量,因为static代表类的成员,transient代表对象的临时数据,被声明这两种类型的数据成员不能被序列化。
8. final、finally、finalize三个关键字的区别
- final是修饰符(关键字)可以修饰类、方法、变量
- finally在异常处理的时候使用,提供finally块来执行任何清除操作
- finalize是方法名,在垃圾收入集器将对象从内存中清除出去之前做必要的清理工作
9. 线程共享与线程私有
线程共享:
线程私有:
10.关于线程局部存储TLS(thread local storage)
- 是解决多线程中的对同一变量的访问冲突的一种技术
- TLS会为每一个线程维护一个和该线程绑定的变量的副本
- Java平台的java.lang.ThreadLocal是TLS技术的一种实现
11. 关于多线程和多进程
1、一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程(通常说的主线程)。 2、资源分配给进程,同一进程的所有线程共享该进程的所有资源。 3、线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。 4、处理机分给线程,即真正在处理机上运行的是线程。 5、线程是指进程内的一个执行单元,也是进程内的可调度实体。 6、线程之间共享进程获得的数据资源,所以开销小,但不利于资源的管理和保护;而进程执行开销大,但是能够很好的进行资源管理和保护。
12.运行时常量池
运行时常量池(Runtime Constant Pool)是方法区的一部分。Class文件中除了有类的版本、字段、方法、接口等描述信息外,还有一项信息是常量池(Constant Pool Table),用于存放编译器生成的各种字面量和符号引用,这部分内容将在类加载后进入方法区的运行时常量池中存放。
|