深入理解Java虚拟机学习总结(一) 自动内存管理机制

 2019-12-22 10:30  阅读(757)
文章分类:JVM

1、java技术体系:主要五类如下

java语言

各种硬件平台上的java虚拟机

class文件格式

java API类库

第三方java类库

java card

JAVA ME(J2ME)

JAVA SE(standard edition)

JAVA EE(enterprise edition)

java语言,java虚拟机,java API类库:不准确的统称为JDK(java development kit):支持java程序开发的最小环境

java虚拟机,java API类库:不准确的统称JRE(java runtime environment):JAVA运行的标准环境

2、运行时数据区域

方法区,堆 : 由所有线程共享

虚拟机栈,本地方法栈,程序计数器:线程隔离的数据区

程序计数器:由于java虚拟机的多线程轮流切换并分配处理器时间的方式来实现的,为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器(线程 私有的内存)

虚拟机栈:java虚拟机栈也是线程私有的,它的生命周期与线程相同,虚拟机栈描述的是java方法执行的内存模型:每个方法被执行的时候都会同时创建一个栈帧用于存储局部变量表、操作栈、动态链接、方法出口等信息。每一个方法被调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中的从入栈到出栈的过程。

局部变量表:存放了编译期可知的各种基本数据类型、对象引用和returnAddress类型(指向了一条字节码指令的地址)。

两种异常情况:如果线程请求的栈深度大于虚拟机所允许的深度,抛StackOverFlowError

如果虚拟机栈可以动态扩展,当扩展到无法申请到足够的内存时会抛OutOfMemoryError

本地方法栈:与虚拟机栈类似,为虚拟机使用到的native方法服务。

java堆:堆是java虚拟机所管理的内存最大的一块,所有线程共享,在虚拟机启动时创建,用于**存放对象实例(所有对象的实例以及数组都放在这里)。**堆是垃圾收集器主要管 理的区域

方法区:线程共享的内存区域,用于存储已经被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据

http://blog.csdn.net/zhushuai1221/article/details/51378474
http://www.cnblogs.com/java-my-life/archive/2012/08/01/2615221.html

点赞(0)
版权归原创作者所有,任何形式转载请联系作者; Java 技术驿站 >> 深入理解Java虚拟机学习总结(一) 自动内存管理机制

相关推荐