Object类有哪些方法
registerNatives()
//私有方法
getClass()
//返回此 Object 的运行类。
hashCode()
//用于获取对象的哈希值。
equals(Object obj)
//用于确认两个对象是否“相同”。
clone()
//创建并返回此对象的一个副本。
toString()
//返回该对象的字符串表示。
notify()
//唤醒在此对象监视器上等待的单个线程。
notifyAll()
//唤醒在此对象监视器上等待的所有线程。
wait(long timeout)
//在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或 者超过指定的时间量前,导致当前线程等待。
wait(long timeout, int nanos)
//在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量前,导致当前线程等待。
wait()
//用于让当前线程失去操作权限,当前线程进入等待序列
finalize()
//当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。
请解释一下对象的创建过程?(半初始化)
加问DCL要不要加volatile问题?(指令重排)
为了禁止指令重排序,所以要引入 volatile。
对象在内存中的存储布局?(对象与数组的存储不同)
例如一个class对象中有三个变量,分别是int(4bytes),long(8bytes),boolean(1bytes)
按照存储布局,对象大小为8(Markword)+4(class pointer)+4(int)+8(long)+1(boolean)=25,但经过对齐后,要加7bytes让其被8整除,所以实际大小为32bytes。
对象头具体包括什么? (markword klasspointer)Synchronized锁信息
对象怎么定位?(直接 间接)
对象怎么分配?(栈上—线程本地—Eden—old)
0bject o= new 0bject()在内存冲占用多少字节?
根据上面的存储布局理论,8(Markword)+4(class pointer)+4(padding)=16bytes
问题:为什么hotspot不使用C++对象来代表java对象?
class对象是在堆还是在方法里面
Class
对象是在堆内存中创建的