目录 jav a 虚拟机内存管理机制(一):JVM 内存管理总结【分享】 收藏 ........................... 1 jav a 虚拟机内存管理机制(二):了解JVM 的内存管理与垃圾回收 收藏 .................. 5 java 虚拟机内存管理机制(三):我主管写的一些jvm 内存管理知识 收藏 ... 8 jav a 虚拟机内存管理机制(一):JVM 内存管理总结【分享】 收藏 近期看了看Java 内存泄露的一些案例,跟原来的几个哥们讨论了一下,深入研究发现JVM里面还是有不少以前不知道的细节,这里稍微剖析一下。先看一看JVM 的内部结构—— 如图所示,JVM 主要包括两个子系统和两个组件。两个子系统分别是Class loader 子系统和 Execution engine(执行引擎) 子系统;两个组件分别是Runtime data area (运行时数据区域)组件和 Native interface(本地接口)组件。 Class loader 子系统的作用:根据给定的全限定名类名(如 java.lang.Object)来装载class 文件的内容到 Runtime data area 中的method area(方法区域)。Java 程序员可以extends java.lang.ClassLoader 类来写自己的Class loader。 Execution engine 子系统的作用:执行classes 中的指令。任何JVM specification 实现(JDK)的核心都是Execution engine,不同的JDK 例如Sun 的JDK 和IBM 的JDK 好坏主要就取决于他们各自实现的Execution engine 的好坏。 Native interface 组件:与native libraries 交互,是其它编程语言交互的接口。当调用native 方法的时候,就进入了一个全新的并且不再受虚拟机限制的世界,所以也很容易出现JVM 无法控制的native heap OutOfMemory。 Runtime Data Area 组件:这就是我们常说的JVM 的内存了。它主要分为五个部分—— 1、Heap (堆):一个Java 虚拟实例中只存在一个堆空间 2、Method Area(方法区域):被装载的class 的信息存储在 Method area 的内存中。当虚拟机装载某个类型时,它使用类装载器定位相应的class 文件,然后读入这个class 文件内容并把它传输到虚拟机中。 3、Java Stack(java 的栈):虚拟机只会直接对 Java stack 执行两种操作:以帧为单位的压栈或出栈 4、Program Counter(程序计数器):每一个线程都有它自己的PC 寄存器,也是该线程启动时创建的。PC 寄存器的内容总是指向下一条将被执行指令的饿地址,这里的地址可以是一个本地指针,也可以是在方法区中相对应于...