JVM虚拟机

  1. Java虚拟机的原理
    所谓虚拟机,就是一台虚拟的机器,他是一款软件,用来执行一系列虚拟计算指令,大体上虚拟机可分为系统虚拟机和程序虚拟机,他们完全是对物理的计算的仿真,提供一个可以运行完整操作系统的软件平台。

    程序虚拟机典型代码就是Java虚拟机,他专门为执行单个计算程序而计算,在Java虚拟机中执行的指令我们称为Java字节码指令,无论是系统虚拟机还是程序虚拟机,在上面运行的软件都被限制于虚拟机提供的资源中。

    Java发展至今,出现过很多虚拟机,最初sun使用的一款叫做ClassIc的Java虚拟机,到现在引用最广泛的HotSpot虚拟机,除了Sun以外,还有BEA的jrockit,目前jrockit和HostSopt都被Oracle收入旗下,大有整合的趋势。

  2. 认识Java虚拟机的基本结构.

    • 类加载系统:负责从文件系统或者网络加载Class信息,加载的信息存放在一块称之为方法区的内存空间。
    • 方法区:存放类的信息,常量信息,常量池信息,包括字符串字面量和数字常量
    • Java堆:在Java虚拟机启动的时候建立Java堆,他是Java程序最主要的内存工作区域几乎所有的对象实例都存放到Java堆中,堆空间是所有线程共享
    • 直接内存:JavaNio库允许Java程序直接内存,从而提高性能,通常直接内存速度会优于Java堆,(把数据直接放到内存中)Redis
    • Java栈:每个虚拟机线程都有一个私有栈,一个线程的Java栈在线程创建的时候被创建,Java栈保存着局部变量,方法参数,返回值等
    • 本地方法栈:和Java栈非常类似,最大不同为本地方法栈用于本地方法调用
    • 垃圾回收系统:Java的核心,也是不可少的,Java有一套自己的进行垃圾清理的机制,开发人员无需手工清理.
    • PC寄存器:寄存器也是每个线程私有的空间,Java虚拟机会为每个线程创建pc寄存器
    • 执行引擎:虚拟机的核心组件就是执行引擎,他负责执行虚拟机的字节码,一般会先进行编译成机器码后执行
  1. 总结

    具体划分为如下5个内存空间(非常重要)

    • 栈:存放局部变量
    • 堆:存放所有new出来的东西
    • 方法区:被虚拟机加载是类信息,常量,静态常量等
    • 程序计数器(和系统相关)
    • 本地方法栈
  • Good Luck!
上一篇:JVM:堆、栈、方法区


下一篇:你真的可以管理自己的时间吗_day01