java虚拟机内存

来源:互联网 发布:ae cc 2016 mac破解 编辑:程序博客网 时间:2024/05/17 03:48

这就是我们常说的JVM的内存了。它主要分为五个部分——

1、Heap(堆):一个Java虚拟实例中只存在一个堆空间,存放运行时所有对象和数组。

2、MethodArea(方法区域):被装载的class的信息存储在Methodarea的内存中。当虚拟机装载某个类型时,它使用类装载器定位相应的class文件,然后读入这个class文件内容并把它传输到虚拟机中。

3、JavaStack(java的栈):虚拟机只会直接对Javastack执行两种操作:以帧为单位的压栈或出栈,每次启动一个新的线程,就会被分配一个栈。

4、ProgramCounter(程序计数器):每一个线程都有它自己的PC寄存器,也是该线程启动时创建的。PC寄存器的内容总是指向下一条将被执行指令的饿地址,这里的地址可以是一个本地指针,也可以是在方法区中相对应于该方法起始指令的偏移量。

5、Nativemethodstack(本地方法栈):保存native方法进入区域的地址

以上五部分只有Heap和MethodArea是被所有线程的共享使用的;而Javastack,Programcounter和Nativemethodstack是以线程为粒度的,每个线程独自拥有自己的部分。


新生代,包括eden区和survivor区 默认是8:1采用复制算法,每次将eden区和一块survivor标记之后复制到另一块survivor中,如果不够,会使用担保机制,直接进入年老代

年老代,使用标记整理算法,标记之后,采用内存移动。


jvm配置上如下参数:

-Xmx20M-Xms20M-XX:+HeapDumpOnOutOfMemoryError-XX:HeapDumpPath=/Users/brady

可以查看内存溢出是,堆信息


0 0
原创粉丝点击