运行时数据区(java虚拟机所管理的内存)
程序计数器 将要执行字节码的行号指示器;线程私有java虚拟机栈 为虚拟机执行java方法服务;线程私有本地方法栈 为虚拟机使用到的本地方法使用(hotspot 中合二为一)java 堆方法区 类信息,常量,静态变量,即时编译后的代码缓存数据 永久代(before jdk8,使用永久代实现方法区) 元空间(动态改变大小,垃圾回收)运行是常量池 方法区的一部分,类的版本,字段,方法,接口,等描述信息,编译产生的字面量和符号引用,运行期间的常量(String.intern())直接内存(native数据库直接分配堆外内存)
====== 对象创建
对象创建避免并发(CAS, TLAB(thread local allocation buffer)分配方式(指针碰撞(Bump the pointer), 空闲列表(Free list))对象设置(hash, age, class, bias)<init>()对象访问
句柄访问(对象移动时只需要改变句柄中的地址,不改变ref)直接指针访问(减少异常指针访问)oom(outOfMemoryError)
java 堆溢出栈溢出方法区运行时常量溢出直接内存溢出