java空间,JAVA的内存是如何划分的

Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干不同的数据区域java空间,这些区域都有各自的用途以及创建和销毁的时间快速备案域名快速备案。Java虚拟机所管理的内存将会包括以下几个运行时数据区域,如下图(图片来源网上)所示:java空间,JAVA的内存是如何划分的下面我们具体就每个场景进行阐述。运行时数据区域方法区:方法区是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据 。方法区包含运行时常量池,是用于存放编译期生成的各种字面量和符号引用的。垃圾收集行为在这个区域比较少出现,但并非数据进了方法区就永久的存在了,这个区域的内存回收目标主要是针对常量池的回收和对类型的卸载,当方法区无法满足内存分配需要时,将抛出OutOfMemoryError异常。虚拟机栈:Java虚拟机栈是线程私有的 ,它的生命周期与线程相同。虚拟机栈描述的是Java方法执行的内存模型,每个方法在执行的同时都会创建一个栈帧用于存储局部变量表、操作数栈、动态链表、方法出口信息等。每一个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程,如果扩展时无法申请到足够的内存,就会抛出OutOfMemoryError异常。这块内存是线程私有的。本地方法栈:本地方法栈与虚拟机栈的作用相似,不同之处在于虚拟机栈为虚拟机执行的Java方法服务,而本地方法栈则为虚拟机使用到的Native方法服务。会抛出stackOverflowError和OutOfMemoryError异常。这块内存是线程私有的。堆:堆是所有线程共享的一块内存区域,在虚拟机启动时创建,此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例以及其属性都在这里分配内存。堆是垃圾收集器管理的主要区域。由于现在收集器基本采用分代回收算法,所以堆还可细分为:新生代和老年代。如果堆中没有内存完成实例分配,并且堆也无法完成扩展时,将会抛出OutOfMemoryError异常。程序计数器:可以看做是当前线程所执行的字节码的行号指示器。这块内存是线程私有的。直接内存:直接内存不是虚拟机运行时数据区的一部分,在NIO类中引入一种基于通道与缓冲区的IO方式,它可以使用Native函数库直接分配堆外内存,然后通过一个存储在Java堆中的DirectByteBuffer对象作为这块内存的引用进行操作。了解了运行时数据区域相关构成后,下面我们来看看对象的创建过程,如图:我们着重看最右边一部分,不同的变量会分配到不同的内存区域里,比如new出来的东西会存放到堆中,而局部变量则是存放在栈中。总之,了解并掌握这些知识是一个合格的Java程序员必需的技能,也只有这样才能写出更好的程序,更好地优化程序的性能。1 补全计算机基础知识。找一个好一点的学校网站,进去看他们计算机专业课程设置,到他们的论坛收购毕业生的教材。2 考证,建议考软件设计师或者软件架构师。这样一个是有国家信用背书,很多企业会通过证书承认你的水平。二是以考促学,在考试准备中发现自己知识缺陷并补全。3 阅读优秀的开源项目,可以先看网上的源码解析文章,有了基础概念后再去看实际代码。这样减少培训班学习的一些速成知识,代码示例给自己错误引导。4 做好本职工作,及时总结项目中的业务与技术知识。如果可能,把这些知识整理成文章,发布到个人博客或者公众号,这是你学习成果的证明。5 多与同事,同行交流,多看经典书籍。听君一席话,胜读十年书。有时候别人一些无意的小技巧,小知识能让你大大提高工作效率。 现在人们愈发相信,在今后的十年、二十年之内,Java都将是IT行业最炙手可热的技术,Java软件工程师将持续成为最热门的岗位之一,历史也不断的证明,JAVA的发展越来越好。这不但被广大的程序员和计算机人士看到,许多的培训机构也早已尝到了Java培训的甜头,在过去的7年终,一个又一个IT培训机构靠Java培训发家致富,一个又一个Java培训讲师走到台前,被广大的大学生们及java新手所熟知。时至今日,Java培训仍然是IT培训中最火的培训之一。不过,儿童级别打打闹闹的初级培训已经不再具备市场,从近2年及今后若干年,Java培训的发展前景将依靠于就业培训,只有以实实在在就业为导向的培训才能经得起市场的考验。   Java有三个版本:标准版(J2SE)、企业版(J2EE)和微型版(J2ME),J2SE就是Java的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入式系统开发,如手机、PDA、家用电器等方面的编程;J2EE则应用于大量的企业级应用,如网站、ERP系统等。其中以J2EE和J2ME应用最为广泛。目前Java的这三大体系在全世界众多的领域应用最为广泛,无论是政府、科研还是企业,就连我们买的智能机其实也都是java机,android的发展更是带动JAVA往移动方面的拓展。过去和现在,Java越来越火,将来势必也发展的更好。     Java正在改变着全世界的生活。全球有30亿Java器件运行着Java,500多万Java开发者活跃在地球的每个角落,数十亿计的Web用户每次上网都亲历Java的威力。实际上,JAVA是一个发展迅速的新兴行业,Sun企业以及IBM、Oracle、Netscape等企业都在大力推进Java的应用。Java在的应用有向更广阔的领域扩展的趋势,作为一种语言,Java在过去十年中取得了其他任何语言都无法比拟的成绩。Java的前程不可限量。


本文出自快速备案,转载时请注明出处及相应链接。

本文永久链接: https://www.xiaosb.com/beian/35339/