Java虚拟机几种内存容量

2017-04-06  本文已影响0人  陆小红_

示例代码:

public class Memory {
    public static void main(String[] args) {
        //当前虚拟机进程从操作系统申请的内存大小
        System.out.println("当前内存:"+Runtime.getRuntime().totalMemory()/1024/1024+" MB");

        //当前虚拟机进程从操作系统申请的内存空余量
        System.out.println("空余内存:"+Runtime.getRuntime().freeMemory()/1024/1024+" MB");

        //当前虚拟机进程从操作系统可申请的最大内存容量
        System.out.println("可申请最大内存:"+ Runtime.getRuntime().maxMemory()/1024/1024+" MB");
    }
}
当前内存:245 MB
空余内存:240 MB
可申请最大内存:3641 MB

说明:
  提起java我们就不得不提起Java虚拟机。为什么叫它虚拟机呢,“虚拟机”是一个相对于“物理机”的概念,这两种机器都有执行代码的能力,对于“物理机”,他执行的代码主要是建立在操作系统上的一套指令集,直接运行在处理器,寄存器等硬件上;而对于“虚拟机”,它就像一个虚拟出来的“物理机”,注意是虚拟出来的,并不是真正的“物理机”,它的实现上也有一些类似“物理机”的指令集,而只要Java语言甚至其他语言通过编译得到的字节码准遵循这套指令集的规范,那么这些语言就能运行在虚拟机上。换句话说,Java程序要想执行,首先要在Java虚拟机上执行,然后虚拟机将这些操作映射为在相应操作系统物理机上的执行动作,再在物理机上执行。
  还有一点需要明确是,Java虚拟机启动运行后,它相对于操作系统来说实际上也就是一个“普通的进程”,它可以有自己进程描述符,内存空间等,上面几行代码就说明了这中情况。

  1. totalMemory()方法用于获取当前虚拟机进程从操作系统申请的内存大小。虽然虚拟机可以向操作系统申请内存,但是申请大小是受到限制的,而且申请过程也是一个动态的过程,即使用多少,申请多少直到最大值,这样可以减少维护内存的开销。假如一次性申请最大容量的内存,且只用很小的一部分,那么维护这块内存将是一个不小的开销。
  2. freeMemory()方法用于获得当虚拟机进程从操作系统申请的内存空余量。为什么说是空余量呢,因为虽然虚拟机会动态申请内存,用多少申请多少,但是它仍然不能保证申请到的内存就一定够用,所以它每次申请的内存会有一点空余,那么通过这个方法就可以知道当前虚拟机有多大的空余内存。
  3. maxMemory()方法用于获取当前虚拟机进程从操作系统可申请内存的最大容量。
上一篇下一篇

猜你喜欢

热点阅读