你的位置:首页 > 软件开发 > Java > 深入理解java虚拟机(1)

深入理解java虚拟机(1)

发布时间:2015-09-28 09:00:02
在C++领域,关于C++的内存存储,结构等等,有一本书:深度探索C++对象模型,讲解的非常透彻。而Java确把这一工作交给了虚拟机来处理。我们首先来看看关于内存的问题。1.问题:1)java 的局部变量存在那里,类型怎么存放的?2)static 变量3)final 变量4)met ...

深入理解java虚拟机(1)

在C++领域,关于C++的内存存储,结构等等,有一本书:深度探索C++对象模型,讲解的非常透彻。

Java确把这一工作交给了虚拟机来处理。

我们首先来看看关于内存的问题。

1.问题:

1)java 的局部变量存在那里,类型怎么存放的?

2)static 变量

3)final 变量

4)method是存放的那里的

5)class类 & 内部类 是如何存放

2.java虚拟机运行是数据区

2.1程序计数器

线程隔离数据,记录当前线程执行的位置。

PC计数器

由于Java虚拟机的多线程,是由线程轮换的方式分配CPU的。所以线程切换后,需要恢复到原来执行的地方

没有线程都需要一块内存来记录这个执行位置,此内存是线程私有的。

2.2Java虚拟机栈

这个栈就是我们常见的java 面试题中一般会问 heap & stack 的区别。 这里的stack就是我们说的虚拟机栈。

这个栈是存放每个method执行的时候的局部变量表,动态连接,方法出口等信息。

局部变量表存放:局部变量类型,已经基本类型的变量。

栈中可以理解为存放对象的引用,为对象本身存放在堆。

如果申请的内存不够,就会OOM。

2.3本地方法栈

这个东西同Java虚拟机栈非常类似,这里存放这native方法的一些信息。

2.4Java堆

千呼万唤始出来,对象实例就是存放在这个地方。也是java内存最大的地方。

GC的主要工作就是释放这里不用的内存。

这块区域为所有线程共享。所以android就会有activity或者service在非前台状态下,是否低优先级的情况。

2.5方法区

这块地方存放的就是已经加载的类信息,静态变量,常量等。

String abc = “abc”; 这后面的“abc”就存放在这里。

2.5.2 运行时常量区

java在非编译阶段,也可以是一种常量的形式,比如:

String str = "abc"+"d";

原标题:深入理解java虚拟机(1)

关键词:JAVA

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。