Object obj= new Object();这个简简单单一个方法涉及到java 栈,堆,方法区三个之间的关系
-.栈
1.Object obj 会在我们栈里面本地变量表中,作为一个reference类型数据出现。
-.堆
1.new Object()会在java堆中,形成一块存储了Object类型的所有实例数据值的结构化内存。
-.方法区
1.在java堆中还必须包含能查找到此对象类型数据(如对象类型,父类,实现的接口,方法等)的地址信息,这些信息存储在方法区中。
java访问对象的方式有两种
- 一.句柄
1.java会在堆中划分一个内存来作为句柄池,reference中存储的就是对象的句柄地址,而句柄中包含了对象实例数据(在堆)和类型数据(class信息,比如全局变量 类的相关信息在方法区)各自的地址信息。
2.好处就是如果 reference存储的是稳定的句柄地址,不论对象怎么移动(垃圾回收时候会移动),不需要修改reference到句柄的指针。
3.坏处就是需要2次指针定位 - 二.直接指针(hotspot使用该种方法)
1.reference的引用直接指向对象实例数据,对象实例数据内部包含对象类型数据的指针,从而可以去方法区获取对象类型数据
2.好处就是可以快速访问对象,由于访问对象比较频繁所以这种积少成多也是非常可观
如何可以建立更多的线程
1.减小堆的大小
2.减小栈的容量
网友评论