JVM的组成部分与内存管理】的更多相关文章

JVM的组成部分与内存管理 JVM区域划分 由于Java程序是交由JVM执行的,所以我们在谈Java内存区域划分的时候事实上是指JVM内存区域划分.在讨论JVM内存区域划分之前,先来看一下Java程序具体执行的过程: 如上图所示,首先Java源代码文件(.java后缀)会被Java编译器编译为字节码文件(.class后缀),然后由JVM中的类加载器加载各个类的字节码文件,加载完毕之后,交由JVM执行引擎执行.在整个程序执行过程中,JVM会用一段空间来存储程序执行期间需要用到的数据和相关信息,这段…
java虚拟机内存管理图如下图所示: 1.线程共享区,是所有的线程所共用的,线程共享区有一下几个组成: 1.方法区: 1.运行时常量池,已经被虚拟机加载的类信息(1.类的版本信息,2.字段,3.方法,4.接口等),常量,静态变量,即时编译器编译后的代码等数据. 2.垃圾回收器也会光顾这个区域,例如常量池. 3.HotSpot中用方法区来实现永久代.这样的做的好处就是,垃圾回收器可以像管理java堆一样管理这部分内存,省去了为方法区编写内存管理的工作,注意的是这 仅仅限于HotSpot中,其他的虚…
对于从事C.C++程序开发人员来说,在内存管理领域,他们既是拥有最高权力的“皇帝”又是从事最基础工作的“劳动人民”--既拥有每一个对象的“所有权”,又负责每一个对象生命开始到终结的维护责任. 对于Java程序员来说,在虚拟机自动内存管理机制的帮助下,不再需要为每一个new操作去写配对的delete/free代码,不容易出现内存泄漏和内存溢出问题,由虚拟机管理内存这一切看起来都很美好.不过,也正是因为Java程序员把内存控制的权力交给了Java虚拟机,一旦出现内存泄漏和内存溢出方面的问题,如果不了…
java虚拟机所管理的内存将会包括一下几个运行时数据区域. 程序计数器: 程序计数器是一块较小的内存空间.字节码解析式工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支.循环.跳转.异常处理.线程恢复等基础功能都需要依赖这个计数器来完成.java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,在任何一个时刻,一个处理器都会执行一条线程中的指令.为了能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各条线程之间计数器互不影响,线程私有.如果线程执…
JVM 内存结构 Java 虚拟机的内存空间分为 5 个部分: 程序计数器 Java 虚拟机栈 本地方法栈 堆 方法区 程序计数器(PC) 为什么需要程序计数器 因为Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的.任意时刻,一个处理器只执行一条指令,为了进程切换后恢复到正确的执行位置,所以才有了程序计数器 作用 记录当前线程的执行字节码的位置,线程私有,也就是每个线程都有一个单独的计数器来记录. 特点 不会发生OutOfMemoryError 执行Native方法,计…
http://blog.csdn.net/lengyuhong/article/details/5953544 http://www.cnblogs.com/nexiyi/p/java_memory_model_and_thread.html 性能监测工具:http://blog.csdn.net/wisgood/article/details/25343845 jvm结构.gc运行机制:http://blog.csdn.net/tonytfjing/article/details/442782…
本系列的第一篇文章,预计本系列最后面会有两三个案例. Java与C.C++不一样Java不需要Coder进行手动内存管理,而这一切都交给JVM进行自动内存管理,这从某种程度上来说也减轻了我们Coder不少的编码量,而我们是否还有必要了解JVM的内存管理机制呢,答案是否定的:因为Java也会和C.C++一样发生内存泄漏.内存溢出,尽管它发生这些事故会少很多,但一旦发生了而你又不了解他的内存管理机制这将是非常棘手的问题:还有个原因就是Java是运行在JVM上的,而不能JVM参数可能会影响到程序的执行…
在进行Java程序设计时,一般不涉及内存的分配和内存回收的相关代码,此处引用一句话: Java和C++之间存在一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外的人想进去,墙里面的人想出来 ,个人从这两句话中,捕获到了 两个点 . java的自动内存管理机制,极大的节省了开发人员的精力,避免了易错且复杂的内存管理设计,相对于手动的内存管理这是极大的飞跃. java自动内存管理机制,其不能根据具体的场景提供最优的内存管理,其只提供普适的内存管理机制.想比于C++的手动内存管理,灵活性不够,存在制约…
本文介绍的Java虚拟机(JVM)的自动内存管理机制主要是参照<深入理解Java虚拟机>(第2版)一书中的内容,主要分为两个部分:Java内存区域和内存溢出异常.垃圾回收和内存分配策略.因此我也会分为两个部分来讲解,但这并不代表这两个部分在JVM中是分割的.反之,其实这两个部分关联性很强.只不过为了便于介绍,所以我才分开来讲.在介绍它们详细内容之前,我首先会给出两幅思维导图以便读者可以了解一下里面所包含的内容,然后我会根据思维导图中的知识点一一为大家进行介绍. 第一部分 Java内存区域和内存…
本篇文章主要剖析Spark的内存管理体系. 在上篇文章 spark 源码分析之十四 -- broadcast 是如何实现的?中对存储相关的内容没有做过多的剖析,下面计划先剖析Spark的内存机制,进而进入内存存储,最后再剖析磁盘存储.本篇文章主要剖析内存管理机制. 整体介绍 Spark内存管理相关类都在 spark core 模块的 org.apache.spark.memory 包下. 文档对这个包的解释和说明如下: This package implements Spark's memory…