jvm是什么,与操作系统,tomcat等容器什么关系?
jvm是处于操作系统和应用软件之间的。操作系统管理硬件,不同的操作系统有不同的参数,jvm负责去解决各个操作系统的差异,上面再封装一层,。(详细内容请戳这里)
jvm内存模型:
粗略分:方法区、堆、栈
运行时可分为如下内存区域:方法区、堆、本地方法栈、虚拟机栈、程序计数器
来张图就一清二楚,一目了然了:
方法区:也叫永久区Perm,还叫非堆non-heap,存放类信息、常量、静态变量等数据,是线程共享的区域。
堆:分为老年代Old,新生代Young。新生代又分为伊甸园Eden,幸存区Survive(s0,s1)。
栈:分本地方法栈和虚拟机栈。主要用于方法的执行。
程序计数器:保存当前正在执行程序的内存地址。程序计数器中只存储当前线程执行程序的行号,一个类指针的数据结构。各条线程之间的计数器互不影响,独立存储,我们称这类内存区域为“线程私有”的内存。
jdk1.8中的改进,把永久区Perm用元空间Matespace取代了。两者的区别是Matespace把数据存储在了本地内存中,而Perm存储在了方法区,若Perm里数据过多,会引起full GC。(详细请戳这里)
总结:
整理出来,讲出来。
参考文章:
http://www.cnblogs.com/ityouknow/p/5610232.html
http://www.jianshu.com/p/222a4ac2c1cc