进程

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

此图来自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类型编译优化为不同的本地代码, 第二次运行的时候直接运行本地代码。 

转载于:https://www.cnblogs.com/beyondbit/p/4772088.html

Java程序-进程中的进程相关推荐

  1. java获取服务器信息返回前端,java程序获取linux服务器进程信息

    搜索了很多关于获取Linux的信息,但是没有发现获取linux服务器的进程信息详细说明. 在这里求解一下,能否在java代码中实现读取代码执行的本机linux服务器中的进程信息? 该问题又分为三个小问 ...

  2. 计算机关闭这些程序,电脑中哪些进程可以关闭? 节约资源

    有网友问小编电脑上京进程那么多,到底哪些是可以关闭的,哪些是不能关闭掉呢?说到这里就多了,电脑运行的程序不同,进程也是不同的.当然一般不是系统进程都是可以将其关闭的.特色进程除外.那么电脑中哪些进程可 ...

  3. python启动多个进程_Python程序中的进程操作--—--开启多进程

    Python程序中的进程操作-----开启多进程 之前我们已经了解了很多进程相关的理论知识,了解进程是什么应该不再困难了,刚刚我们已经了解了,运行中的程序就是一个进程.所有的进程都是通过它的父进程来创 ...

  4. python打开一个软件并进行操作_python程序中的进程操作

    之前我们已经了解了很多进程相关的理论知识,了解进程是什么应该不再困难了,刚刚我们已经了解了,运行中的程序就是一个进程.所有的进程都是通过它的父进程来创建的.因此,运行起来的python程序也是一个进程 ...

  5. linux 进程与锁,linux 中的进程与锁

    ############################################################################### #################### ...

  6. 深入理解Python中的进程

    博客核心内容: 进程的概念 并行与并发的区别 同步与异步的概念 进程创建的方式 父进程和子进程的关系 线程的相关概念 Python中进程池的相关概念 Python的的回调函数 进程池+回调函数的实际应 ...

  7. 用户态程序阻塞原因_进程阻塞 操作系统某种情况进行进程的阻塞和唤醒操作...

    进程阻塞 1)请求系统服务.例如打印服务,进程在提出打印请求后,系统创建打印服务进程为该进程服务,而提出打印请求可能被阻塞起来等待打印的完成. 2)启动某种操作.例如,进程发出启动I/O或启动打印机的 ...

  8. java vo转map_Jython:在 Java 程序里运行 Python 代码 4.5

    彭翌 彭翌,网易游戏资深运维开发工程师,从事大数据相关的基础架构平台研发工作,业余时间也关注分布式系统等相关领域. 前言 众所周知,JVM 在大数据基础架构领域可以说是独占鳌头,当我们需要开发大数据处 ...

  9. JAVA程序员笔试面试题汇总及答案 .

    1.面向对象的特征有哪些方面 (1)抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只 是选择其中的一部分,暂时不用部分细节. ...

最新文章

  1. swift笔记——环境搭建及Hello,Swift!
  2. 机器学习笔记(十)降维和度量学习
  3. cocos2dx游戏开发——微信打飞机学习笔记(三)——WelcomeScene的搭建
  4. 如何发现 Kubernetes 中服务和工作负载的异常
  5. android自定义圆圈动画,自定义view实现动画数字圆圈
  6. Django UnicodeEncodeError解决
  7. 当今将Windows应用程序迁移到Windows on Arm的实践
  8. 我发起了一个 .Net Core 平台上的 分布式缓存 开源项目 ShareMemory 用于 取代 Redis...
  9. 汉字字符内码查询_计算机等级考试查询系统
  10. 跑马灯效果 例子 写法 利用闭包
  11. LeetCode3 无重复字符的最长子串
  12. 数据归一化和常用的归一化方法
  13. 暴风电视刷鸿蒙系统刷机包,暴风电视蓝屏怎么解决
  14. python后端开发的书籍_资深程序员Python学习进阶书籍推荐_后端开发
  15. 三菱运动控制电子凸轮应用 三菱Q173系列的电子凸轮使用
  16. 什么是微隔离?它的作用是什么?
  17. 汉医健康:“互联网+医疗健康”让患者更有“医”靠
  18. uniapp添加蒙版的时候怎么禁止页面滚动
  19. 独家丨DeepMind科学家、AlphaTensor一作解读背后的故事与实现细节
  20. CEYE平台使用简介

热门文章

  1. chm editor
  2. 小记安装python的MySQLdb模块
  3. 如何设置Server-U的IP限制
  4. [转贴]基于HTTP的QQ协议
  5. java表格源码_Java表格JTable代码实例解析
  6. perl 正则表达式 引擎_Perl 5引擎概述
  7. 氢气露点和湿度换算_如何创建氢气鼓组以获取乐趣和收益
  8. raspberry pi_如何将Raspberry Pi配置为微控制器
  9. outlook2016投票_投票:2016年读者选择奖和最佳采访奖
  10. (47)fs创建多级目录