JVM
什么是JVM?
1.JVM是JAVA虚拟机,他的作用是运行JAVA程序,有跨平台,垃圾回收,内存管理的功能。
内存区域管理:
在执行JAVA程序时,会把他所管理的内存划分为几个区域,分成2种,1种是线程共享的,有方法区和堆,1种是线程私有的,有计数器,栈;
共享的:
方法区:一般存储常量,静态变量,class加载时会存放类和元数据等信息,这个很少发生垃圾回收。JDK8后永久代改成元空间,元空间实际存在内存,不在虚拟机,所以是由服务器内存决定大小,不是MaxPermSize控制。
堆:几乎所有被实例化的类对象都存放在这里,分新生代和老年代。一般是JAVA新对象会存放在新生代,当回收过后,回收不掉N次(默认是15次),会转移到老年代。
私有的:
计数器:记录程序执行的痕迹,和指向下一节点。
栈:每个线程都有一个JAVA栈,虚拟机只会对栈做2个动作,压栈和出栈,当线程执行调用一个方法时,压入一个新栈帧,帧里存放参数、局部变量、运算结果等,结束一个栈有2种方法,一种是return,一种的抛出异常。
垃圾回收只会对共享区域进去回收。在JDK8之后,方法区原本的永久代,改成元空间
参考: