JAVA网页编程之JVM运转时的数据区仓酷云
你总不能说你写框架吧,那无疑会加大工作量,现在大多企业采取的是折中的办法,就是改别人写好的框架,可要改框架,前提是你对这个框架足够的了解,这就更难了。了解JVM运转时的数据区是Java编程中的进阶部分。我们在开辟中都碰到过一个很头疼的成绩就是OutOfMemoryError(内存溢堕落误),可是假如我们懂得JVM的外部完成和其运转时的数据区的事情机制,那末后面的成绩就会水到渠成。在这片文章中,我们将复杂懂得JVM中有哪些运转时数据区和这些数据区的事情机制。JVM运转时数据辨别类
[*]程序计数器(ProgramCounter(PC)Register)
[*]JVM栈(JavaVirtualMachineStacks)
[*]堆内存(HeapMemory)
[*]办法区(MethodArea)
[*]运转经常量池(Run-timeConstantPool)
[*]当地办法栈(NativeMethodStacks)
有图才干说
按线程持有分别
检察下面的图,能够得知以上六个数据区实在线程公有仍是共享,能够分为以下两种。
[*]单个线程公有(ManagedPer-Thread)属于这一种的数据区包括程序计数器,JVM栈另有当地办法栈。每一个线程都公有这三个数据区,这些数据区在其所属的线程创立时初始化,并跟着所属线程停止被烧毁。
[*]多个线程共享属于这一种的数据区包括堆内存,办法区和运转经常量池。这些数据区能够被每个线程会见,他们跟着JVM启动而初始化,同时陪伴JVM封闭而烧毁。
程序计数器
在通用的盘算机系统中,程序计数器用来纪录以后正在实行的指令,在JVM中也是云云。程序计数器是线程公有,以是当一个新的线程创立时,程序计数器也会创立。因为Java是撑持多线程,Java中的程序计数器用来纪录以后线程中正在实行的指令。假如以后正在实行的办法是当地办法,那末现在程序计数器的值为undefined。注重这个地区是独一一个不抛出OutOfMemoryError的运转时数据区。
JVM栈
在先容JVM栈之前,复杂先容一个观点,栈帧
栈帧
一个栈帧跟着一个办法的挪用入手下手而创立,这个办法挪用完成而烧毁。栈帧内寄存者办法中的部分变量,操纵数栈等数据。
JVM栈只对栈帧举行存储,压栈和出栈操纵。栈内存的巨细能够有两种设置,流动值和依据线程必要静态增加。在JVM栈这个数据区大概会产生抛出两种毛病。
[*]StackOverflowError呈现在栈内存设置成流动值的时分,当程序实行必要的栈内存凌驾设定的流动值会抛出这个毛病。
[*]OutOfMemoryError呈现在栈内存设置成静态增加的时分,当JVM实验请求的内存巨细凌驾了其可用内存时会抛出这个毛病。
堆数据区
堆数据区是用来寄存对象和数组(特别的对象)。堆内存由多个线程共享。堆内存跟着JVM启动而创立。尽人皆知,Java中有一个很好的特征就是主动渣滓接纳。渣滓接纳就操纵这个数据区往返收对象进而开释内存。假如堆内存残剩的内存不敷以满意于对象创立,JVM会抛出OutOfMemoryError毛病。
办法区
在JVM标准中,办法区被视为堆内存的一个逻辑部分。这一点大概因为详细的JVM完成而分歧,乃至在办法区不完成渣滓接纳处置也是能够的。办法区和堆内存一样被多个线程会见,办法区中寄存类的信息,好比类加载器援用,属性,办法代码和机关办法和常量等。当办法区的可用内存没法满意内存分派需求时,JVM会抛出OutOfMemoryError毛病。
ruby里有这些工具吗?又要简单多少?我没有用过这两门语言,我估计在这些语言力没有很统一的这种标准,或者根本就没有提供。 学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。 Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站 还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。 学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。 应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展 至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。 所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。 吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧 《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
页:
[1]