JAVA 垃圾收集器与内存分配策略
引言
垃圾收集技术并不是Java语言首创的,1960年诞生于MIT的Lisp是第一门真正使用内存动态分配和垃圾收集技术的语言。垃圾收集技术需要考虑的三个问题是:
哪些内存需要回收?
什么时候回收?
如何回收?
垃圾收集技术并不是Java语言首创的,1960年诞生于MIT的Lisp是第一门真正使用内存动态分配和垃圾收集技术的语言。垃圾收集技术需要考虑的三个问题是:
哪些内存需要回收?
什么时候回收?
如何回收?
HttpClient
是java语言下一个支持http协议的客户端编程工具包,它实现了HTTP协议的所有方法,但是不支持JS渲染。我们在做一些小玩意时,有可能需要登录某些网站获取信息,那么HttpClient就是你的好帮手,废话不多说,进入实战。
看代码:
public void testInteger()
{
Integer a = 1;
Integer b = 1;
Integer c = 128;
Integer d = 128;
System.out.println(a == b);
System.out.println(c == d);
}
结果是什么?
从一段代码说起:
public void stringTest(){
String a = "a"+"b"+1;
String b = "ab1";
System.out.println(a == b);
}
大家猜一猜结果如何?
在用hibernate
的时候发现idea
能自动生成JavaBean
,同时带有一些注解,这引起了我的好奇。当在学习Android
的时候,我发现XUtils
这个工具包中的DBUtils也能够使用类似hibernate
的注解。于是乎在java编程思想中找了找有关注解的用法。
接口Runnable
覆盖run方法
Thread thread = Thread(Runnable r,String name);
thread.start();
线程信息
thread中包含id name priorty status
priorty中包括1到10,1最低,10最高
status状态有6种:new, runnable, blocked, waiting, time waiting, terminated
线程中断
interrupt()方法会中断线程。产生interrupredexception异常,用isInterrupted()来判断。
线程休眠与恢复
sleep函数也会抛出interruptedexception异常
等待线程终止
当一个线程join()方法被调用,调用所在线程将会挂起,直到被调用线程完成任务
守护线程
Daemon 线程优先级很低,当一个进程里没有其他线程运行的时候,守护线程才运行。
setDaemon方法只能在start前进行调用。
线程中不可控异常处理
非运行时异常,ioexception classnotfoundexception,必须声明throw或捕获
运行时异常,numberformatexception,不需要任何操作
run方法不支持throws所以只能捕获
线程的分组
ThreadGroup tg;
使用工厂类创建线程
接口:ThreadFactory
可以创建个性化的线程,即设置线程信息。
使用synchronized实现同步方法
synchronized可以给类,方法,对象使用,静态方法和动态方法同时使用synchronized,则两个方法能被不同线程同时使用。
同步代码中使用条件
wait()使用时要捕获interruptedexception方法
使用锁同步:
Lock lock = new ReentrantLock();
lock.lock();
lock.unlock();
在锁中使用多条件:
Condition c1 = lock.newCondition();
Condition c2 = lock.newCondition();
c1.await();
c2.signal();
condition必须在lock()和unlock()方法内。