知识点

1.常量池中主要存储2大类常量:字面量和符号引用。字面量如文本字符串,java中声明为final的常量值等等,而符号引用如类和接口的全局限定名,字段的名称和描述符,方法的名称和描述符。

2.类运行过程

首先编译生成.class文件,即二进制码,然后通过类加载classLoad机制加载到JVM内存中;主类(即有public那个类)加载到方法区(有常量池、main字节码)中,找到(public static void main(String[] rgs))入口,运行main函数,如果在main函数中检测到对象,即栈中指向堆地址引用对象,就在堆中创建该对象,首先,在方法区加载该类,该类型信息包含方法表等,其次在堆中new一个该对象,该对象中有指向它的方法的指针,可以在方法表中查找所要调用的方法(在main方法中调用对象的方法)。

3.Class对象在堆中生成,作为方法区数据的访问入口。

4.notify只能唤醒一个线程,如果本方唤醒了本方,没有意义。而notifyAll解决了本方线程一定会唤醒对方线程的问题。

5.jvm中每个对象都有一个monitor,当synchronized发生的时候,jvm是用monitorenter和monitorexit两个指令来控制锁的获取和释放。假如一个类中定义了一个synchronized的static函数A,也定义了一个synchronized的instance函数B,那么这个类的同一对象Obj在多线程中分别访问A和B两个方法时,不会构成同步,因为他们的锁都不相同。A方法的锁是Obj所属的那个Class,而B的锁是Obj所属的这个对象。在<effective java>一书中将Foo.class和P1.getClass()用于作同步锁还不相同,不能用P1.getClass()来达到锁这个Class的目的。P1指的是由Foo类产生的对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值