java JVM 一
java JVM 1
http://hg.openjdk.java.net/ Java 源码 下载Mercurial,类似svn
栈内存,内存内存有序,
线程私有, 每个线程都会对应一份 线程安全
堆内存,内存结构可以无序
线程共享的, 线程不安全
句柄池、实例池
句柄池:栈中的对象引用,通过句柄池可以真正映射到内存地址。
这样垃圾收集时,对内存整理对象内存位置变化,只需要内部修改句柄池的映射关系,栈中的句柄引用不需要修改。
方法区
存放静态数据:如:Class信息 常量 静态变量 代码数据
这里有个常量池:专门针对常量处理,提高效率,如:String
直接内存
不有JVM管理使用,一般都是Java直接绕过JVM分配的内存。一般通过sun.misc.Unsafe.allocateMemory(long)
对象内存关系
引用信息在 栈中
具体的对象 堆中
对象的Class 方法区中
堆溢出
java.lang.OutOfMemoryError: Java heap space
-Xmx -Xms 来控制
栈溢出
java.lang.StackOverflowError 说明栈超出了虚拟机的要求深度
-Xss 控制
方法区溢出
java.lang.OutOfMemoryError: PermGen space
-XX:PermSize -XX:MaxPermSize 控制