当前位置: 首页 > news >正文 装修网站论坛wordpress教材 news 2025/10/25 11:10:22 装修网站论坛,wordpress教材,企业网站的建设多少钱,品牌网站建设目标关于作者#xff1a;CSDN内容合伙人、技术专家#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 #xff0c;擅长java后端、移动开发、商业变现、人工智能等#xff0c;希望大家多多支持。 未经允许不得转载 目录 一、导读二、概览三、相关知识3.1 逃逸… 关于作者CSDN内容合伙人、技术专家 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 擅长java后端、移动开发、商业变现、人工智能等希望大家多多支持。 未经允许不得转载 目录 一、导读二、概览三、相关知识3.1 逃逸分析3.2 对象逃逸状态3.3 Java中的对象都是在堆中分配吗说明为什么 四、 推荐阅读 一、导读 我们继续总结学习Java基础知识温故知新。 逃逸分析的基本行为就是分析对象动态作用域当一个对象在方法中被定义后它可能被外部方法所引用例如作为调用参数传递到其他地方中称为方法逃逸。 二、概览 Java对象逃逸指的是一个对象在其应该被限制访问的范围之外被引用或访问的情况简单解释就是我有一个方法在方法内创建了一个对象但是这个对象传递到其他地方了。 在Java中对象一般在包含它们的方法中创建和使用当方法结束时这些对象会被回收。然而当对象在方法中被引用或传递到其他方法中时就会发生对象逃逸。 我们举例 这种写法直接返回的是对象用处就是被别的变量所引用会造成对象逃逸从而增加了GC的压力。public StringBuilder getSb(){StringBuilder sb new StringBuilder();return sb;}不如改成下面这样public String getSb1(){StringBuilder sb new StringBuilder();return sb.toString();}第一段代码中的sb就逃逸了而第二段代码中的sb就没有逃逸。 三、相关知识 在这之前我们要先了解一些jvm的基本知识。 Java运行时数据区Runtime Data Area是指在Java程序执行期间Java虚拟机所管理的诸多内存区域分别用于存储不同的数据如上图所示包含了以下几个部分 堆区 主要用于存储对象实例、数组栈区 主要存放java方法、局部变量、操作数栈、动态链接、方法出口、基本类型的变量数据、对象的引用等方法区 主要用于存储类型信息、常量、静态变量、即时编译代码等程序计数器 一个Java的源代码文件变成计算机可执行的机器指令的过程中需要经过两段编译 第一段是把.java文件转换成.class文件。 第二段是把.class转换成机器指令的过程JVM 通过解释字节码将其翻译成对应的机器指令逐条读入逐条解释翻译后来为了解决效率问题引入了 JIT即时编译 技术。 JIT会对代码做很多优化。其中有一部分优化的目的就是减少内存堆分配压力其中一种重要的技术叫做逃逸分析。通过逃逸分析Java Hotspot编译器能够 分析出一个新的对象的引用的使用范围从而决定是否要将这个对象分配到堆上。逃逸分析的基本行为就是分析对象动态作用域 public static StringBuffer craeteStringBuffer(String s1, String s2) {StringBuffer sb new StringBuffer();sb.append(s1);sb.append(s2);return sb; }sb是一个方法内部变量上述代码中直接将sb返回这样这个sb 有可能被其他方法所改变这样它的作用域就不只是在方法内部3.1 逃逸分析 逃逸分析Escape Analysis简单来讲就是Java Hotspot 虚拟机可以分析新创建对象的使用范围并决定是否在 Java 堆上分配内存的一项技术。 在Java代码运行时通过JVM参数可指定是否开启逃逸分析 -XX:DoEscapeAnalysis 开启逃逸分析. 从jdk 1.7开始已经默认开始逃逸分析-XX:-DoEscapeAnalysis 关闭逃逸分析 。-XX:PrintEscapeAnalysis 显示分析结果 使用逃逸分析编译器可以对代码做如下优化 同步省略 锁消除 public void f() {Object hollis new Object();synchronized(hollis) {System.out.println(hollis);} }优化后变成 public void f() {Object hollis new Object();System.out.println(hollis); }分离对象或标量替换将堆分配转化为栈分配 当对象没有发生逃逸时要使指向该对象的指针永远不会逃逸对象可能是栈分配的候选而不是堆分配该对象就可以通过标量替换分解成成员标量分配在栈内存中 和方法的生命周期一致随着栈帧出栈时销毁减少了 GC 压力提高了应用程序性能 3.2 对象逃逸状态 1、全局逃逸GlobalEscape 即一个对象的作用范围逃出了当前方法或者当前线程有以下几种场景 对象是一个静态变量对象是一个已经发生逃逸的对象对象作为当前方法的返回值 2、参数逃逸ArgEscape 即一个对象被作为方法参数传递或者被参数引用但在调用过程中不会发生全局逃逸这个状态是通过被调方法的字节码确定的。 对象逃逸可能会导致以下问题 安全问题对象逃逸可以使对象暴露给不受信任的代码可能导致数据泄露或被篡改。性能问题对象逃逸可能导致对象的生命周期变得不可预测增加垃圾回收的负担降低系统性能。并发问题对象逃逸可能导致多个线程同时访问同一个对象造成线程安全问题。 为了解决对象逃逸问题可以采取以下措施 限制对象的访问范围将对象的作用域限制在方法内部避免在方法外部引用或传递对象。使用局部变量代替成员变量将对象定义为方法内的局部变量而不是成员变量这样可以避免对象在方法外部被引用。使用不可变对象如果对象是不可变的那么即使发生逃逸也不会出现安全和并发问题。使用线程安全的数据结构如果对象需要在多个线程之间共享应该使用线程安全的数据结构或采用同步控制机制来保证并发安全性。 通过避免对象逃逸可以提高代码的安全性、性能和并发性能。 3.3 Java中的对象都是在堆中分配吗说明为什么 对象和数组并不一定都在堆上分配内存的随着JIT编译器的发展在编译期间如果JIT经过逃逸分析发现有些对象没有逃逸出方法 那么有可能堆内存分配会被优化成栈内存分配 JIT编译器就可以在编译期间根据逃逸分析的结果来决定是否可以将对象的内存分配从堆转化为栈。 举个栗子 先定义一个类 XYZclass XYZ {int i; }在定义一个方法 abc(),方法内使用了XYZ类但是并没有外部引用也就说这个对象不会发生逃逸。public void abc() {XYZ xyz new XYZ(); }最后再定义一个for循环来调用abc()方法假设我们在代码中创建100万个XYZ对象for (int i 0; i 1000000; i) {abc();} 假设我们先关闭逃逸分析在代码结束前使用[jmap][1]命令来查看下当前堆内存中有100万个XYZ对象. -Xmx4G -Xms4G -XX:-DoEscapeAnalysis -XX:PrintGCDetails -XX:HeapDumpOnOutOfMemoryError 接下来我们开启逃逸分析再来执行下以上代码,使用jmap命令来查看下当前堆内存中有几万个XYZ对象不是一个量级。 堆内存中分配的对象数量大量减少 -Xmx4G -Xms4G -XX:DoEscapeAnalysis -XX:PrintGCDetails -XX:HeapDumpOnOutOfMemoryError 四、 推荐阅读 Java 专栏 SQL 专栏 数据结构与算法 Android学习专栏 未经允许不得转载 文章转载自: http://www.morning.dtcsp.cn.gov.cn.dtcsp.cn http://www.morning.qlpyn.cn.gov.cn.qlpyn.cn http://www.morning.lmmyl.cn.gov.cn.lmmyl.cn http://www.morning.qsxxl.cn.gov.cn.qsxxl.cn http://www.morning.thrgp.cn.gov.cn.thrgp.cn http://www.morning.fqklt.cn.gov.cn.fqklt.cn http://www.morning.sgfgz.cn.gov.cn.sgfgz.cn http://www.morning.frtb.cn.gov.cn.frtb.cn http://www.morning.kpbgp.cn.gov.cn.kpbgp.cn http://www.morning.pnljy.cn.gov.cn.pnljy.cn http://www.morning.ctxt.cn.gov.cn.ctxt.cn http://www.morning.mzhjx.cn.gov.cn.mzhjx.cn http://www.morning.gcxfh.cn.gov.cn.gcxfh.cn http://www.morning.bhqlj.cn.gov.cn.bhqlj.cn http://www.morning.sbkb.cn.gov.cn.sbkb.cn http://www.morning.npbnc.cn.gov.cn.npbnc.cn http://www.morning.kdnrc.cn.gov.cn.kdnrc.cn http://www.morning.gjws.cn.gov.cn.gjws.cn http://www.morning.qieistand.com.gov.cn.qieistand.com http://www.morning.lftpl.cn.gov.cn.lftpl.cn http://www.morning.qichetc.com.gov.cn.qichetc.com http://www.morning.gblrn.cn.gov.cn.gblrn.cn http://www.morning.qxnns.cn.gov.cn.qxnns.cn http://www.morning.ktmbr.cn.gov.cn.ktmbr.cn http://www.morning.zkqjz.cn.gov.cn.zkqjz.cn http://www.morning.wfysn.cn.gov.cn.wfysn.cn http://www.morning.rlhjg.cn.gov.cn.rlhjg.cn http://www.morning.lhyhx.cn.gov.cn.lhyhx.cn http://www.morning.tcfhs.cn.gov.cn.tcfhs.cn http://www.morning.httzf.cn.gov.cn.httzf.cn http://www.morning.zwzlf.cn.gov.cn.zwzlf.cn http://www.morning.sypzg.cn.gov.cn.sypzg.cn http://www.morning.jjsxh.cn.gov.cn.jjsxh.cn http://www.morning.rswfj.cn.gov.cn.rswfj.cn http://www.morning.qwbls.cn.gov.cn.qwbls.cn http://www.morning.hxljc.cn.gov.cn.hxljc.cn http://www.morning.frnjm.cn.gov.cn.frnjm.cn http://www.morning.lkpzx.cn.gov.cn.lkpzx.cn http://www.morning.lqtwb.cn.gov.cn.lqtwb.cn http://www.morning.xfxqj.cn.gov.cn.xfxqj.cn http://www.morning.zdkzj.cn.gov.cn.zdkzj.cn http://www.morning.mgmqf.cn.gov.cn.mgmqf.cn http://www.morning.mgfnt.cn.gov.cn.mgfnt.cn http://www.morning.iterlog.com.gov.cn.iterlog.com http://www.morning.dbphz.cn.gov.cn.dbphz.cn http://www.morning.jzlfq.cn.gov.cn.jzlfq.cn http://www.morning.eshixi.com.gov.cn.eshixi.com http://www.morning.fmrd.cn.gov.cn.fmrd.cn http://www.morning.ltywr.cn.gov.cn.ltywr.cn http://www.morning.zqbrw.cn.gov.cn.zqbrw.cn http://www.morning.ydyjf.cn.gov.cn.ydyjf.cn http://www.morning.fjshyc.com.gov.cn.fjshyc.com http://www.morning.rmpfh.cn.gov.cn.rmpfh.cn http://www.morning.xsbhg.cn.gov.cn.xsbhg.cn http://www.morning.znlhc.cn.gov.cn.znlhc.cn http://www.morning.ctlzf.cn.gov.cn.ctlzf.cn http://www.morning.jjsxh.cn.gov.cn.jjsxh.cn http://www.morning.hbfqm.cn.gov.cn.hbfqm.cn http://www.morning.wnrcj.cn.gov.cn.wnrcj.cn http://www.morning.lrprj.cn.gov.cn.lrprj.cn http://www.morning.zfrs.cn.gov.cn.zfrs.cn http://www.morning.zxdhp.cn.gov.cn.zxdhp.cn http://www.morning.lgphx.cn.gov.cn.lgphx.cn http://www.morning.skrcn.cn.gov.cn.skrcn.cn http://www.morning.ymqfx.cn.gov.cn.ymqfx.cn http://www.morning.nlpbh.cn.gov.cn.nlpbh.cn http://www.morning.rhwty.cn.gov.cn.rhwty.cn http://www.morning.sypzg.cn.gov.cn.sypzg.cn http://www.morning.mkccd.cn.gov.cn.mkccd.cn http://www.morning.gsjzs.cn.gov.cn.gsjzs.cn http://www.morning.rrxmm.cn.gov.cn.rrxmm.cn http://www.morning.jbfzx.cn.gov.cn.jbfzx.cn http://www.morning.qxdrw.cn.gov.cn.qxdrw.cn http://www.morning.mfmx.cn.gov.cn.mfmx.cn http://www.morning.rynqh.cn.gov.cn.rynqh.cn http://www.morning.qncqd.cn.gov.cn.qncqd.cn http://www.morning.tpkxs.cn.gov.cn.tpkxs.cn http://www.morning.mm27.cn.gov.cn.mm27.cn http://www.morning.nllst.cn.gov.cn.nllst.cn http://www.morning.bdgb.cn.gov.cn.bdgb.cn 查看全文 http://www.tj-hxxt.cn/news/248006.html 相关文章: 网站建设注意什么wordpress直播主题 做网站需要报备什么云服务器多网站解析 广安 网站建设杭州建设信用信息网 网站logo怎么做最清楚宁波在线制作网站 下关汇做网站的公司工商企业网站 网站编辑工具学校校园网站 江苏太平洋建设集团官方网站安卓app做网站外壳 网站优化 代码优化自助网站建设技术支持 织梦猫html5高端网络服务机构网站模板苏州相城区最新楼盘价格 怎么知道一个网站的权重宁波网站建设公司 网站域名及空间购买wordpress 统计ip 兰州优化网站爱网站排行 精仿源码社区网站源码一直免费的服务器万能视频播放器 西安免费平台网站建设建设微网站项目报告 网站模板制作流程大型电商网站开发方案 网站一般都是用什么软件做的平台怎么注册 多城市网站如何做seo网页游戏制作过程的 网站建设销售怎么做广告网站建设价格 为什么有些网站看不到百度快照小型企业网站设计教程 做网站优化的教程各种网站的区别 天津市住房和城乡建设局网站动图在线制作网站 通州网站建设站开发评价网站建设推广服务合同范本 大学网站建设论文如何查询网站备案进度查询 淄博微网站开发品牌策划案 东莞网站建设_东莞网页设计】前端开发培训机构知乎 北仑网站建设29gz做阀门网站 五莲县城乡建设局网站首页郑州市做网站的 大连网站建设方案咨询建设银行江西分行官方网站 专业建设网站服务湖北城市建设职业技术学院网站 天津建设项目招投标网站网页微博如何退出登录