自己从网上搜资料拼接了一张JVM内存图:如下图所示:我们思考几个问题:1.jVM是怎么运行的?2.JVM运行时内存是怎么分配的?3.我们写的java代码(类,对象,方法,常量,变量等等)最终存放在哪个区?VM运行时数据区域:1.程序计数器(program Counter Register): 是.....
分类:
编程语言 时间:
2014-08-16 13:45:10
阅读次数:
265
jvm在java程序运行时会将它所管理的内存划分成不同的区域做不同的功能,这并不难以想象。主要有两类结构,即:堆和栈。java堆主要是保存运行时的对象和数组数据,是所有线程共享的内存区域,在堆中有方法区、运行时常量池。方法区是代码的存储区,类、方法数据、方法的字节码、..
分类:
其他好文 时间:
2014-08-13 03:41:56
阅读次数:
170
自动内存管理机制 Java虚拟机(JVM)在执行Java程序过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有的区域则是依赖用户线程的启动和结束而建立和销毁。根据《Java虚拟机规范 第2版》规定,运行时数据区包....
分类:
编程语言 时间:
2014-08-07 22:01:56
阅读次数:
349
Java栈与堆堆:顺序随意栈:后进先出(Last-in/First-Out). Java的堆是一个运行时数据区,类的对象从中分配空间。这些对象通过new、newarray、anewarray和multianewarray等指令建立,它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的,堆的优势是可...
分类:
编程语言 时间:
2014-07-30 11:43:03
阅读次数:
315
Java语言是一种编译后再经过解释器执行的过程, 解释器主要就是如何处理解释Class文件的二进制字节流。JVM主要包含三大核心部分:运行时数据区,类加载器和执行引擎。 虚拟机将描述类的数据从Class文件加载到内存,并对数据进行校验、准备、解析和初始化,最终就会形成可以被虚拟机使用的J...
分类:
编程语言 时间:
2014-07-26 14:11:05
阅读次数:
279
Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机的进程的启动而存在,有些区域则是依赖用户的线程的启动和结束而建立和销毁。Java虚拟机所管理的内存将会包括一下几个运行..
分类:
其他好文 时间:
2014-07-23 21:27:36
阅读次数:
221
上一回对JVM运行时数据区域的组织结构进行了概述,这一回将对各个组成进行详解。程序计数器【ProgramCounterRegister】程序计数器是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数..
分类:
其他好文 时间:
2014-07-23 21:16:16
阅读次数:
233
直接内存并不是虚拟机运行时数据区的一部分,也不是Java虚拟机规范中定义的内存区域,但是这部分内存也被频繁的使用,而且也可能导致OutOfMemoryError异常出现,在JDK1.4中新加入了NIO类,引入了一种基于通道与缓冲区的I/O方式,它可以使用Native函数库直接分配堆外内存,然后..
分类:
其他好文 时间:
2014-07-23 21:15:26
阅读次数:
228
介绍完Java虚拟机的运行时数据区后,我们就可以探讨在Java语言中,对象访问是如何进行的?如下面这句代码:Objectobj=newObject();假设这句代码出现在方法体中,那“Objectobj”这部分的语义将会反映到Java栈的本地变量表中,作为一个reference类型数据出现。而“newObject()”..
分类:
其他好文 时间:
2014-07-23 21:12:56
阅读次数:
281
Java的堆是一个运行时数据区,类的(对象从中分配空间。这些对象通过new、newarray、anewarray和multianewarray等 指令建立,它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时 动态分配...
分类:
编程语言 时间:
2014-07-19 12:25:30
阅读次数:
223