Java虚拟机
来源:互联网 发布:业主名录采集软件 编辑:程序博客网 时间:2024/04/30 11:05
前序
Java虚拟机可能指三个不同的东西:
1、抽象的规范
2、一个具体的实现
3、一个运行中的虚拟机实例
抽象的规范,是sun公司对Java虚拟机的抽象规范;一个具体的实现,不同公司或机构基于抽象规范实现各自的虚拟机,如官方sun公司的Java 虚拟机HotSpotVM,这是大家使用最多的,当然还有其他公司,如IBM的J9VM;一个运行的虚拟机实现,当你启动了一个Java程序时,一个虚拟机实例也就诞生了,虚拟机实现是通过某一个类的main方法来运行一个Java程序的,当然各个Java程序运行在自己的虚拟机实例中,当程序关闭退出时,虚拟机实例也随之消亡。
方法区和堆
每个Java虚拟机的实例都有一个方法区和堆,方法区和堆是所有线程共享的。当类装载子系统装载一个 class文件时,它会从class文件包含的二进制数据中解析类型信息,然后把类型信息放到方法区去,此外,类(静态)变量也保存在方法区中。当程序运行时,虚拟机会把所有该程序在运行时创建的对象放到堆中。
方法区也可以被垃圾收集,因为虚拟机允许通过用户定义的类装载器来动态扩展Java程序,因此一些类也会成为程序“不再引用”的类。当某个类变为不再被引用的类时,Java虚拟机可以卸载这个类(垃圾收集),从而使方法区占据的内存保持最小。
PC寄存器、Java栈和本地方法栈
当每创建一个新线程时,线程都得到自己的PC寄存器(程序计数器)以及一个Java栈。线程正在执行一个Java方法(不是本地方法),PC寄存器的值总是指向下一条将被执行的指令,而Java栈则总是存储线程在Java方法调用的状态--包括它的局部变量、被调用时传进来的参数、方法的返回值,以及计算的中间结果等等。而本地方法调用的状态,则以某种依赖于具体实现的方式存储在本地方法栈中,也可能是在寄存器或者其他与特定实现相关的内存区中。
Java栈是由很多栈帧(stack frame)或者帧(frame)组成的,一个栈帧包含Java方法调用的状态,线程调用Java方法时,虚拟机压入一个新的帧到Java栈中,当该Java方法返回时,这个帧也就从Java栈中弹出并抛弃。- Java虚拟机
- Java虚拟机
- Java虚拟机
- Java虚拟机
- Java虚拟机
- Java虚拟机
- Java虚拟机
- Java虚拟机
- Java虚拟机
- Java虚拟机
- JAVA虚拟机
- Java虚拟机
- Java虚拟机
- Java虚拟机
- java虚拟机
- java虚拟机
- Java虚拟机
- Java虚拟机
- HDU 3308 线段树之区间合并
- HDU 1114 完全背包
- notification自动更新
- Java 中 List.subList() 方法的使用陷阱
- 【NOIP2013模拟】七夕祭
- Java虚拟机
- SQLiteDatabase(数据库的增删改查)
- MySQL基础 (DML)
- 形态学处理
- Android SDK下载技巧
- 浅谈Android管理task方式
- jQ鼠标移入快速显示title
- MDK中的RW RO ZI ROM的含义
- 求1+2+。。。+n,不用乘除,for、while、if、else、switch、case等关键字及条件判断语句