java/android基础总结1

来源:互联网 发布:淘宝上卖自己做的熟食 编辑:程序博客网 时间:2024/05/16 12:08

前言:学习android已经有段时间了,最近几天小小总结了一下,都是一些比较基础但自己总是忘记的知识点。

1.Hashtable,HashMap,TreeMap
Hashtable,HashMap,TreeMap都实现了Map接口;
HashTable:线程是同步的,不允许null key和null value;
HashMap:线程是不同步的,允许存储null key和null value;
TreeMap:线程是不同步的。

2.ArrayList与Vector
相同点:这两个类都实现了List接口(List接口继承了Collection接口);他们都是有序集合,不同于HashSet.
区别:
线程安全方面:Vector是线程安全的,ArrayList是线程不安全的;
数据增长方面:当存储在里面的元素超过了容量时,就需要增加他们的存储空间,Vector增长原来的一倍,ArrayList增长为原来的0.5倍。

3.java同步指的是synchronized机制,而非synchronized的都是异步。
假设有两个程序段A和B,
线程同步是指执行完一段程序后才能执行后面的程序,即A->B.
线程异步是指A和B能同时执行,不分先后。

4.强引用是最常见的引用:
比如:
StringBuffer buffer = new StringBuffer();
创建了一个StringBuffer类的对象,并用一个变量buffer存储对这个对象的引用。这就是个强引用。变量持有的是这个对象的引用。通常,引用是一个对象的存储地址。
Java不像C或者C++一样,Java没有取地址符号&,也没有解引用符号*或者->。引用不同于指针,引用不能与整形进行互相转换,也不能进行增减操作。
强引用是和垃圾回收机制相关的。
一般的,如果一个对象可以通过一系列的强引用引用到,那么就说明它是不会被垃圾回收机制(Garbage Collection)回收的。因为垃圾回收是不会回收你正在使用的对象的。

5.垃圾回收机制Garbage Collection
如果一个对象,没有一个引用指向它,那么它就被认为是一个垃圾。
  An object is considered garbage when there are no longer any references to it stored in any variables, the fields of any objects, or the elements of any arrays.
在某一个时间,garbage collector将会发现成为垃圾的对象,然后回收它所占用的内存。
C中用malloc()和free()来管理内存。
C++是用new和delete来分配和管理内存空间。
而Java使用garbage collection机制,不用程序员写代码管理,这样会有一些性能上的影响,因为garbage collector会主动地回收内存。但是,GC机制减少了内存泄露,并且提高了程序员的效率。
如果我们在应当移除引用的时候没有移除,垃圾回收将一直不会回收这个对象,引起内存泄露。
三种类型的引用定义了三种不同层次的可达性级别,由强到弱排列如下:
SoftReference > WeakReference > PhantomReference
越弱表示对垃圾回收器的限制越少,对象越容易被回收。

6.ANR Application is not responding

7.JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。这就是Java的能够“一次编译,到处运行”的原因。

8.程序、进程和线程:
程序是一段静态的代码,它是应用程序执行的蓝本。进程是程序的一次动态执行过程,它对应了从代码加载、执行至执行完毕的一个完整过程,这个过程也是进程本身从产生、发展至消亡的过程。线程是比进程更小的单位,一个进程执行过程中可以产生多个线程,每个线程有自身的产生、存在和消亡的过程,也是一个动态的概念。每个进程都有一段专用的内存区域,而线程间可以共享相同的内存区域(包括代码和数据),并利用这些共享单元来实现数据交换、实时通信与必要的同步操作。

0 0
原创粉丝点击