当前位置: 首页 > news >正文 山西省工程建设标准定额网站外贸网站推广技巧 news 2025/10/28 8:23:02 山西省工程建设标准定额网站,外贸网站推广技巧,推广方法,阳江市网站备案幕布1、前言对于C、C程序员来说#xff0c;在内存管理领域#xff0c;他们拥有对象的“所有权”。从对象建立到内存分配#xff0c;不仅需要照顾到对象的生#xff0c;还得照顾到对象的消亡。背负着每个对象生命开始到结束的维护和管理责任。对于JAVA程序来说#xff0c;因为J…1、前言对于C、C程序员来说在内存管理领域他们拥有对象的“所有权”。从对象建立到内存分配不仅需要照顾到对象的生还得照顾到对象的消亡。背负着每个对象生命开始到结束的维护和管理责任。对于JAVA程序来说因为JVM虚拟机的加持不再需要为每个对象去写配对的delete/free代码。交由虚拟机去管理内存因而相对来讲不容易出现内存移除和内存泄漏的问题。不过也正是JAVA程序员把内存控制权交给了JVM一旦出现了内存泄露和溢出的问题修正起来会比较艰难如果你不了解虚拟机的化。因而从事JAVA的程序员多多少少需要了解JVM的内存模型帮助我们更好应对JAVA内存问题。2、JVM内存模型很多Java开发人员会把Java内存区域划分为堆内存Heap和栈内存Stack。这种划分方式是直接继承C、C程序的内存布局。在Java中实际内存区域划分会更复杂。开篇一张图线程隔离的数据区或称为“线程私有的内存”。他们的生命周期与线程相同。线程开辟的时候会分配该内存空间当线程被销毁则这么部分内存空间也会随即释放。2.1、 程序计数器程序计数器为当前线程所执行的字节码的行号指示器。由于JVM的多线程是通过时间片轮转切换依次分配处理器来执行的。因为在任何一个确定的时刻一个处理器只能执行一条线程指令。当处理器被切换到另一个线程指令执行的时候处理器需要记住当前指令中断的位置以便下次执行的时候从当前中断位置恢复。该中断的位置成为指令字节码的行号。程序计数器就是用来存储该行号因此程序的分支循环跳转异常处理线程恢复等都需要依赖这个计数器。如果一个线程正在执行一个JAVA方法则该计数器记录的是当前正在执行的虚拟机字节码指令的地址如果一个线程正在执行的是本地Native方法则该计数器的值为空。该内存区域也是唯一一个在《Java虚拟机规范》中没有规定任何OOM情况的区域。为线程私有。2.2、虚拟机栈Java虚拟机以方法作为最基本的执行单元“栈帧”则是用于支持虚拟机进行方法调用和执行的数据结构也是虚拟机运行时数据区中的虚拟机栈的栈元素。虚拟机栈描述的是Java方法执行的线程内存模型每个方法被执行的时候Java虚拟机都会同步创建一个栈帧用于存储局部变量表、操作数栈、动态连接、方法出口等信息。每个方法被调用直至执行完毕的过程就对应着一个栈帧在虚拟机中从入栈到出栈的过程。虚拟机栈也是线程私有的。例如举个简单的例子我们同步将虚拟机栈内存放大// 有一段代码 double methodA() {int quantity 10;double result methodB(quantity);return result; }double methodB(int quantity){if(isVip()) {return quantity * _basePrice * 0.9;} else {return quantity * _basePrice * 0.98; } }boolean isVip(){retrun _isvip 1 ? true : false; }处理器在执行该段代码的时候先执行methodA()中间发现调用了methodB()后面发现又调用了isVip()。此时方法methodAmethodBisVip执行时的数据结构被称为栈帧。则该线程的虚拟机栈模型如下方法执行methodA方法method方法对应的栈帧栈帧1被压入栈底位置此时methodA为当前活动栈帧当方法methodA调用methodB方法此时methodB方法对应的栈帧栈帧2也被压入栈中此时执行methodB方法当方法methodB调用isVip方法继续将isVip方法对应的栈帧栈帧3压入栈中当isVip方法执行完毕对应的isVip栈帧执行出栈操作并将结果记录下来当methodB方法执行完毕同样对应的栈帧2执行出栈操作methodA执行完毕对应的栈帧1执行出栈操作此时虚拟机栈中没有任何的栈帧当线程执行结束后该虚拟机栈也会随即消亡实际上是在等待被回收。试想一下如果一个递归方法且没有合适的条件退出。会导致死循环递归那么最终该虚拟机栈也会被压爆。这时候虚拟机会抛出StackOverflowError异常。StackOverflowError异常指线程请求的栈深度大于虚拟机所允许的深度将抛出该异常。OutOfMemoryError异常如果Java虚拟机栈容量可以动态扩展当栈扩展时无法申请到足够的内存则会抛出该异常。HotSpot虚拟机的栈容量是不可以动态扩展的所以在此虚拟机上是不会出现虚拟机栈导致的OutOfMemoryError。2.2.1、局部变量表是一组变量值的存储空间用于存放方法的参数和方法内部定义的局部变量。局部变量是以变量槽Slot为最小单位。每个变量槽都应该能存放一个虚拟机基本数据类型booleanbytecharshortintfloatlongdouble对象引用reference类型或returnAddress类型的数据。当一个方法被调用时JVM会使用局部变量表来完成参数值到参数变量列表的传递过程即实参到形参的传递。如果执行的是实例方法非static那局部变量表中第0位索引的变量槽默认是用于传递方法所属对象实例的引用在方法中可通过“this”来访问。2.2.2、操作数栈操作数栈是方法执行算数运算或调用其他方法进行参数传递时候的媒介。操作数栈也可以称为表达式栈在方法执行过程中根据字节码指令往栈中写入数据或提取数据。2.2.3、动态连接每个栈帧都包含一个指向运行时常量池中该栈帧所属方法的引用持有这个方法的引用是为了支持方法调用过程中的动态链接。Class文件的常量池中存有大量的符号引用字节码中的方法调用指令就以常量池里指向方法的符号引用作为参数。这些符号引用一部分会在类加载阶段或第一次使用时被转化为直接引用称为静态解析。另一部分将在每次运行期间转化为直接引用这部分就称为动态连接。2.2.4、方法出口当一个方法执行后要么正常调用完成将返回值返回给上层调用者要么异常调用完成因为异常导致程序退出。但是不管如何退出在方法退出之后程序都必须返回到最初方法调用时的位置方法返回时可能需要在栈帧中保存一些信息用来帮助恢复它的上层主调方法的执行状态。方法退出的过程实际上等同于把当前栈帧出栈所以退出时可能执行的操作有1、恢复上层方法的局部变量表和操作数栈2、把返回值如果有的话压入调用者栈帧的操作数栈中3、调整PC计数器的值以指向方法调用指令后面的一条指令等。2.2.5、附加信息其他附加信息。不过一般会把动态连接方法返回地址其他附加信息统一称为栈帧信息。2.3、本地方法栈本地方法栈与虚拟机栈的作用非常类似。只是虚拟机栈为Java方法服务而本地方法栈为使用本地方法Native服务。HotSpot虚拟机通常直接把本地方法栈和虚拟机栈合二为一统称为栈。同样本地方法栈也会抛出StackOverflowError和OutOfMemoryError异常。2.4、Java堆对于Java应用程序Java堆是整个虚拟机内存中最大的一块。是被所有线程共享的一块内存区域。Java中几乎所有的对象实例以及数组都在堆上分配。因此堆是GC执行垃圾回收的重点关注对象。堆空间的模型如下方法区详见2.5。老年代Tenure / Old Gen存储长期存活对象老年代占堆空间的2/3。如果老年代内存满了会触发Major GC。新生代Young Gen生命周期较短的对象占对空间的1/3。其中新生代又分为EdenFrom SurvivorTo Survivor。伊甸空间Eden顾名思义伊甸园为一切初始的地方。这里指对象的生命周期刚出生便是在这块内存区域。如果Eden空间不足以给新对象分配足够的内存则会触发Minor GC对Eden进行垃圾回收将不需要的对象销毁剩余对象放进S0From Survivor区。如果再次触发GC会将S0复制到S2。如果再次触发GC存活对象从S2复制到S0。GC过程该空间会重复此步骤直到对象存活周期经历过15次GC默认15次可配置依然没有被回收将会转移到老年代。S0空间From Survivor/ S2空间To Survivor这两个成为幸存空间Eden、S0、S2的内存占用比例默认为811。当新生代内存达到一定量时如果直接进行垃圾回收清理会带来空间碎片问题。因此当进行清理之前会将存活的对象放进S0和S2区域有助于垃圾回收和清理。为什么Eden、S0、S2的内存占用比例默认为811IBM公司研究表明新生代中的对象约98%生命周期都是很短的。811是基于大量实验和数据收集分析统计之后的比较合理的比例。Minor GC / Young GC新生代GCMajor GC老年代GC对于高响应要求的系统需要尽量减少Major GC会导致响应超时Full GC清理整个Heap空间包括新生代老年代永久代为什么要把堆空间进行分代不分代不能工作吗其实分代的意义是为了优化垃圾回收GC的性能简单理解就是分而治之。分代以后对部分需要清理对象只需要小范围进行回收即可无需扫描整个堆空间。不过后面的G1垃圾收集器开始取消了内存分代取而代之的是每个平等的region。一个对象创建中堆空间的内存申请和分配流程大致如下此外JVM提供了一些操作对空间的参数选项常见的有参数描述-Xms堆内存初始大小-Xmx堆内存最大允许大小-Xns新生代内存初始大小-Xmn新生代最大允许大小-XX:SurvivorRatio8年轻代中Eden区与Survivor区的容量比例值默认为8即8:1-Xss线程栈内存大小。JDK1.5后默认每个为1M减少该值能生成更多线程2.5、方法区方法区也是线程共享的内存区域用于存储已被JVM加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等数据。别名也叫“非堆”目的是与Java堆区分开。1、类型信息类class接口interface枚举enum注解annotation2、字段信息域信息域名称信息类型的修饰特征符public, abstractfinal......3、方法信息返回类型void等参数列表方法修饰特征public, protected/*** Student方法区* stuInstance: 栈区* new Student(): 堆区*/ Student stuInstance new Student();说到这里很多人会把方法区称为“永久代”或者进行等价。本质上不是的起初HotSpot设计团队选择把分代设计扩展至方法区或者说用永久代来实现方法区这样做的目的是HotSpot的GC回收器能够像Java堆一样管理这部分内存就不用单独为方法区编写一个专门的内存管理工作。JDK8之后废弃了永久代改为元空间Meta Space。元空间与永久代类似最大的区别是元空间直接使用本地内存而不是JVM。因此JDK8过后元空间就不再会出现OOM问题。2.6、运行时常量池运行时常量池是方法区的一部分。class文件中除了有类的版本字段方法接口等描述信息以外还有常量池表用于存放编译期生成的各种字面量和符号引用这部分内容将在类加载后存放到方法区的运行时常量池中。常量池是方法区的一部分当然如果无法申请到内存时也会抛出OutOfMemoryError。3、直接内存直接内存并不是JVM的内存区域属于操作系统本身的内存。JDK1.4加入的NIO类引入了Channel与缓冲区Buffer。它可以直接使用Native函数库直接分配直接内存然后通过一个存储在Java堆中的DirectByteBuffer对象作为这块内存的引用来进行操作可以显著提高性能。为什么这里要讲直接内存直接内存虽然不受到Java堆的限制但是收到了操作系统总内存大小以及处理器寻址空间的限制。 通常我们在用-Xmx设值堆大小信息时会经常忽略直接内存有可能使得内存区域大于物理内存限制而导致动态扩展时出现OOM异常。直接内存既然不属于Java内存那么自然也JVM GC也无法回收他。如果需要回收需要主动调用Unsafe的freeMemory方法。可以通过-XX:MaxDirectMemorySize来指定直接内存的容量大小如果不指定默认与Java堆的最大值一致。直接内存导致内存溢出一个明显的特征是在Heap Dump文件中不会看见明显的异常情况如果发现内存溢出之后产生的Dumo文件很小而程序中又直接或间接使用了Directmemory典型的间接使用就是NIO那就可以考虑重点检查一下直接内存方面的原因。4、小结JVM专栏第一篇。明白了JVM的内存模型对于JVM内存的一些问题处理应该会更加得心应手面试唬人。参考资料《深入理解Java虚拟机》 - 第三版 文章转载自: http://www.morning.qjldz.cn.gov.cn.qjldz.cn http://www.morning.pxrfm.cn.gov.cn.pxrfm.cn http://www.morning.hqwcd.cn.gov.cn.hqwcd.cn http://www.morning.qsy41.cn.gov.cn.qsy41.cn http://www.morning.pqhgn.cn.gov.cn.pqhgn.cn http://www.morning.dyhlm.cn.gov.cn.dyhlm.cn http://www.morning.51meihou.cn.gov.cn.51meihou.cn http://www.morning.stflb.cn.gov.cn.stflb.cn http://www.morning.bzlgb.cn.gov.cn.bzlgb.cn http://www.morning.xkgyh.cn.gov.cn.xkgyh.cn http://www.morning.ngcsh.cn.gov.cn.ngcsh.cn http://www.morning.addai.cn.gov.cn.addai.cn http://www.morning.kjgdm.cn.gov.cn.kjgdm.cn http://www.morning.jwtwf.cn.gov.cn.jwtwf.cn http://www.morning.fbnsx.cn.gov.cn.fbnsx.cn http://www.morning.tpdg.cn.gov.cn.tpdg.cn http://www.morning.pzlcd.cn.gov.cn.pzlcd.cn http://www.morning.jlpdc.cn.gov.cn.jlpdc.cn http://www.morning.nktgj.cn.gov.cn.nktgj.cn http://www.morning.nyhtf.cn.gov.cn.nyhtf.cn http://www.morning.hxwhyjh.com.gov.cn.hxwhyjh.com http://www.morning.ntzbr.cn.gov.cn.ntzbr.cn http://www.morning.tbcfj.cn.gov.cn.tbcfj.cn http://www.morning.nwnbq.cn.gov.cn.nwnbq.cn http://www.morning.nbrdx.cn.gov.cn.nbrdx.cn http://www.morning.jjxnp.cn.gov.cn.jjxnp.cn http://www.morning.wpmqq.cn.gov.cn.wpmqq.cn http://www.morning.ntqgz.cn.gov.cn.ntqgz.cn http://www.morning.xsfny.cn.gov.cn.xsfny.cn http://www.morning.jfxth.cn.gov.cn.jfxth.cn http://www.morning.wjndl.cn.gov.cn.wjndl.cn http://www.morning.dxzcr.cn.gov.cn.dxzcr.cn http://www.morning.bypfj.cn.gov.cn.bypfj.cn http://www.morning.rqrh.cn.gov.cn.rqrh.cn http://www.morning.pyxtn.cn.gov.cn.pyxtn.cn http://www.morning.nnpfz.cn.gov.cn.nnpfz.cn http://www.morning.tnnfy.cn.gov.cn.tnnfy.cn http://www.morning.dcmnl.cn.gov.cn.dcmnl.cn http://www.morning.nytpt.cn.gov.cn.nytpt.cn http://www.morning.dkqbc.cn.gov.cn.dkqbc.cn http://www.morning.wrtw.cn.gov.cn.wrtw.cn http://www.morning.pwrkl.cn.gov.cn.pwrkl.cn http://www.morning.yqkmd.cn.gov.cn.yqkmd.cn http://www.morning.etsaf.com.gov.cn.etsaf.com http://www.morning.tdscl.cn.gov.cn.tdscl.cn http://www.morning.yybcx.cn.gov.cn.yybcx.cn http://www.morning.cfynn.cn.gov.cn.cfynn.cn http://www.morning.gnkdp.cn.gov.cn.gnkdp.cn http://www.morning.yswxq.cn.gov.cn.yswxq.cn http://www.morning.bhrkx.cn.gov.cn.bhrkx.cn http://www.morning.kwnbd.cn.gov.cn.kwnbd.cn http://www.morning.nkjnr.cn.gov.cn.nkjnr.cn http://www.morning.ryqsq.cn.gov.cn.ryqsq.cn http://www.morning.npqps.cn.gov.cn.npqps.cn http://www.morning.kjcll.cn.gov.cn.kjcll.cn http://www.morning.crqpl.cn.gov.cn.crqpl.cn http://www.morning.zwznz.cn.gov.cn.zwznz.cn http://www.morning.hpxxq.cn.gov.cn.hpxxq.cn http://www.morning.hhpkb.cn.gov.cn.hhpkb.cn http://www.morning.rycd.cn.gov.cn.rycd.cn http://www.morning.skbbt.cn.gov.cn.skbbt.cn http://www.morning.dnzyx.cn.gov.cn.dnzyx.cn http://www.morning.qzqjz.cn.gov.cn.qzqjz.cn http://www.morning.srkwf.cn.gov.cn.srkwf.cn http://www.morning.hwnnh.cn.gov.cn.hwnnh.cn http://www.morning.kcfnp.cn.gov.cn.kcfnp.cn http://www.morning.tsmcc.cn.gov.cn.tsmcc.cn http://www.morning.mmclj.cn.gov.cn.mmclj.cn http://www.morning.gynls.cn.gov.cn.gynls.cn http://www.morning.xrpjr.cn.gov.cn.xrpjr.cn http://www.morning.nrrzw.cn.gov.cn.nrrzw.cn http://www.morning.buyid.com.cn.gov.cn.buyid.com.cn http://www.morning.lbywt.cn.gov.cn.lbywt.cn http://www.morning.dxpqd.cn.gov.cn.dxpqd.cn http://www.morning.ppqjh.cn.gov.cn.ppqjh.cn http://www.morning.pqcrz.cn.gov.cn.pqcrz.cn http://www.morning.lmcrc.cn.gov.cn.lmcrc.cn http://www.morning.xywfz.cn.gov.cn.xywfz.cn http://www.morning.pcgjj.cn.gov.cn.pcgjj.cn http://www.morning.jghty.cn.gov.cn.jghty.cn 查看全文 http://www.tj-hxxt.cn/news/256172.html 相关文章: 做网站大家都找谁公司网站制作高端 自助建站优化排名台州网站制作系统 引航科技提供网站建设wordpress 防分析 用asp做网站出现空白wordpress 国外免费主题 深圳网站建设及优化seo服务加盟 网站建设卖手机代码免费系统小说大全 网页制作与网站建设实验报告网站数据怎么做接口供小程序调用 网站建设常识网站建设技术知识大全深圳网络公司招聘 双一流建设专题网站wordpress文章下载 网站建设大约多少钱广西建设网登录入口 怎么做仿制网站wordpress数据库设置 代理记账 营销型网站网络营销与直播电商专业就业前景 网页制作与网站建设关于给予网站建设的请求 石家庄平山网站推广优化官方网站下载微博 西安高校网站建设图库素材 深圳网站建设yuntianxia营销型网站制作多少钱 dw制作网站电脑上如何做网站 贵阳市小程序网站开发公司建设一个能看视频的网站 广东深圳网站设计室wordpress商城分銷 杭州网站建设蒙特虾皮跨境电商注册多少钱 关于旅游网站建设的方案个人特种证件查询网站 如何设置一个网站南昌seo网站开发 网站建设感想开发公司质量管理制度模板 经典模板网站建设公司两个网站可以做友情链接吗 网站建设分期进行怎么入账网站建设销售合同 中国三安建设网站安康鼎盛网站建设 一键建站源码网络推广方案的参考文献 固安做网站的电商网站开发分享 如何做招生网站推广图片素材 龙岩做网站改版一般多久怎么做好营销型网站