进程

我们知道程序在磁盘上的时候是静态的,当他被加载到内存的时候,就变成了一个动态的,称为进程,如下图是程序被加载到内存后,在内存中的分布情况如下

  
  此图来自http://blog.csdn.net/woshinia/article/details/41722085 具体每段的作用可以参考这篇文章,这里我们只要大概了解一下,在程序被加载到内存后,会被分为代码段,数据段,堆段和栈段。其中代码段就是存放数据,数据段存放一些全局和静态数据,堆段存放的动态创建的内存对象,而栈段则是线程栈运行的区域。 

Java虚拟机

  Java虚拟机(Java Virtual Machine 简称JVM)是运行所有Java程序的抽象计算机,是Java语言的运行环境。这是官方对他的解释, Java虚拟机可以运行Java程序,这里Java虚拟机也是程序, 所以当他被加载到内存后也具有上述的特征, 在代码段存放JVM的代码, 在数据区存放JVM的数据, 堆和栈也是JVM在使用。

Java程序

  在一些介绍Java程序的博客中, 我们通常可以看到一些介绍Java内存分布式的情况,比如这篇文章http://www.cnblogs.com/gw811/archive/2012/10/18/2730117.html 里面也介绍了Java的堆和栈, 
 
  那这里的堆和栈和JVM的堆和栈有什么区别呢,这里引入一张图片,如下(图片来源于http://www.importnew.com/14486.html)
 
  这张图表达了两个堆栈的区别,上面是操作系统内一个普通进程的内存分布情况,可以看到其分布情况和我们刚才描述的差不多,同时JVM也是一个普通的进程,所以代码段和数据段存放的也是JVM的代码和数据,主要区分在堆和栈。先说堆,首先是永久代,永久代本质上是Java程序的代码区和数据区。Java程序中类(class),会被加载到整个区域的不同数据结构中去,包括常量池、域、方法数据、方法体、构造函数、以及类中的专用方法、实例初始化、接口初始化等。这个区域对于操作系统来说,是堆的一个部分;而对于Java程序来说,这是容纳程序本身及静态资源的空间,使得JVM能够解释执行Java程序。其次是新生代和老年代。新生代和老年代才是Java程序真正使用的堆空间,主要用于内存对象的存储;但是其管理方式和普通进程有本质的区别,普通的程序是需要动态申请的,而JVM则是一次性申请,然后在逐次分配给Java程序,所以从效率上来说会优于普通程序。
  我们从上面的描述可以看出,JVM是在自己的堆里又模拟了一个“进程”出来,这个“进程”中有代码区、数据区、和“堆”。 这里我们也就可以理解为什么我们可以为运行的虚拟机设置内存大小,我们可以在程序启动的时候通过-Xms,-Xmx等参数来设置堆的大小,其本质还是由JVM控制在JVM的堆区通过malloc来分配指定内存给Java程序使用。
  当然上图也仅仅是一个简化的模型,JVM的内存分配要比上面的复杂,如果按照上图的分配,那程序将会相当的慢,JVM本身做了大量的优化来提升性能,比如提前申请内存。 在.net中, CLR会根据不同的CPU类型编译优化为不同的本地代码, 第二次运行的时候直接运行本地代码。 

Java程序-进程中的"进程"的更多相关文章

  1. 分析占用了大量CPU处理时间的java进程中的进程

    分析占用了大量 CPU 处理时间的是Java 进程中哪个线程 下面是详细步骤: 1. 首先确定进程的 ID ,可以使用 jps -v 或者 top 命令直接查看 2. 查看该进程中哪个线程占用大量 C ...

  2. 1 Java程序文件中函数起始行和终止行在程序文件位置中的判定__抽象语法树方法

    应用需求: 实现对BigCloneBench中函数体的克隆检测,必须标注出起始行号和终止行号. 问题: 给定一个Java文件,从中提取出每个函数的起始行和终止行. 难点: 这个问题的难点在于,对于Ja ...

  3. Java程序开发中的简单内存分析

    首先说明内存总体分为了4个部分, 包括 1.stack segment (栈区存储基本数据类型的局部变量,对象的引用名) 2.heap segment(堆区,一般用于存储java中new 出来的对象) ...

  4. Java程序学习中各阶段的建议

    第一部分:对于尚未做过Java工作的同学,包括一些在校生以及刚准备转行Java的同学. 一.Java基础 首先去找一个Java的基础教程学一下,这里可以推荐一个地址,或者你也可以参照这个地址上去找相应 ...

  5. java程序运行中如果出现异常未被处理,将会被抛到java虚拟机进行处理,程序中断运行后被挂起,在页面输出错误信息(不会输出到console)

    下面的代码中,因为我是使用 for (Iterator<Element> i = el.elements().iterator(); i.hasNext(); ) 迭代器遍历根节点的所有子 ...

  6. 在java程序代码中打开文件

    class     TEST {      public  static  void  main(String[]  args){        System.out.println("He ...

  7. 第五篇(那些JAVA程序BUG中的常见单词)

    The left-hand side of an assignment must be a variable 赋值的左侧必须是变量 left-hand side 左边 assignment 赋值

  8. 第四篇(那些JAVA程序BUG中的常见单词)

    xxx cannot be resolved to a variable xxx无法解析为变量 resolve 解析

  9. 第三篇(那些JAVA程序BUG中的常见单词)

    illegal modifier for parameter xxx; only final is permitted 参数xxx的修饰符非法:只允许final illegal 非法的 modifie ...

随机推荐

  1. IntelliJ IDEA Cannot find declaration to go to

    最近在用IntelliJ IDEA开发一个微服务的项目的时候,从git clone了代码, 再用IntelliJ IDEA导入项目以后.项目里好多方法,类和属性都无法转到定义或者声明处,无论是Ctrl ...

  2. 【转】虚拟机VMware3种网络模式(桥接、nat、Host-only)的工作原理

     VMware网络配置详解一:三种网络模式简介 安装好虚拟机以后,在网络连接里面可以看到多了两块网卡: 其 中VMnet1是虚拟机Host-only模式的网络接口,VMnet8是NAT模式的网络接口, ...

  3. oracle常用命令集合

    一. 表空间相关命令 创建数据表空间 create SMALLFILE tablespace dataSpace datafile 'E:\oracle\product\10.2.0\oradata\ ...

  4. android raw与assets区别

    *res/raw和assets的相同点: 1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制. *res/raw和assets的不同点:1.res/raw中的文件会被映射到R ...

  5. linux时间不同步问题

    怪问题: 时间同步失效 系统: centos 6.6  2.6.32-504.el6.x86_64 情况: 定时任务中写了每分钟同步一次系统时间,定时任务执行成功,时间却未同步,奇怪? 现象: [ro ...

  6. ORA-00020: No more process state objects available故障一例

    今天公司一大早收到通知,昨天数据库数据未生成.当时查看跑批的日志,发现平常只需运行半个小时的过程,今天整整运行了7个小时(明显存在问题),导致后续数据正常时间读取失败.为了了解起因,查看了oracle ...

  7. z-index堆叠规则

    一.z-index z-index用来控制元素重叠时堆叠顺序. 适用于:已经定位的元素(即position:relative/absolute/fixed). 一般理解就是数值越高越靠上,好像很简单, ...

  8. Machine Learning Algorithms Study Notes(2)--Supervised Learning

    Machine Learning Algorithms Study Notes 高雪松 @雪松Cedro Microsoft MVP 本系列文章是Andrew Ng 在斯坦福的机器学习课程 CS 22 ...

  9. CKEDITOR最新版不能上传图片的解决

    文献:http://bbs.csdn.net/topics/390883077 代码例子:http://download.csdn.net/download/itmyhome/7851265 1.原先 ...

  10. Objective-C基础数据类型-NSSet[转]

    转自GISerYang 集合: 集合(NSSet)和数组(NSArray)有相似之处,都是存储不同的对象的地址:不过NSArray是有序的集合,NSSet是无序的集合. 集合是一种哈希表,运用散列算法 ...