一.什么是
是()的缩写,是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。是运行在操作系统之上的,它与硬件没有直接 的交互。
二.内存结构
1.方法区(Method Area)又名 永久代(Permanent Generatio)
所有线程共享,它用于存储已被虚拟机加载的。
java8把永久代移除,使用元数据区,这个区域不再内存中,改由本地内存。
2.堆(Heap)
所有线程共享,它用于存放所有的。
3.java栈(java Stacks)
线程独享,它用来描述java方法执行的内存模型:每个方法被执行时,会创造一个(),用来存放。每一个方法被调用直至执行完成的过程,就对应着一个在虚拟机栈中从入栈到出栈的过程。
4.本地方法栈(Native Method Stacks)
线程独享,它的作用和java栈类似。不同的是,它是用来描述。即非java方法,一般为操作系统本地方法。
5.程序计数器(Program Counter Register)
线程独享,是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的行号指示器。
三.内存分配和回收
1.内存分配:
a.存储在()
会把这一部分作为的对象,即不使用 虚拟机时,这部分没有回收机制。使用虚拟机时,在进行( 标记整理算法 |Mark-Compact算法)时,也会把无用的类和静态变量释放。
把永久代移除,使用,把的信息存储在本地内存中,此时,这部分的空间受总内存大小影响,不再有回收机制。
b.实例对象存放在堆区域。
堆又分为(8/10、1/10、1/10)和老年代。实例对象优先放到,大对象(指需要连续存储空间的对象)直接放到。当空间不足时,会进行(复制算法 |Copying算法),部分对象会释放,部分会进入,其余的会进入。是在进行时使用的空间。当大对象进入或者有对象进入,空间不足时,会进行( 标记整理算法 |Mark-Compact算法),部分对象被释放,空间重新被整理,使空间可以更好的被利用。