当前位置: 首页 > news >正文

网站开发的策划方案南阳谁会做网站

网站开发的策划方案,南阳谁会做网站,大连手机自适应网站制作价格,烟台网站建站一、逃逸分析逃逸分析是编译语言中的一种优化分析#xff0c;而不是一种优化的手段。通过对象的作用范围的分析#xff0c;为其他优化手段提供分析数据从而进行优化。逃逸分析包括#xff1a;全局变量赋值逃逸方法返回值逃逸实例引用发生逃逸线程逃逸:赋值给类变量或可以在其…一、逃逸分析逃逸分析是编译语言中的一种优化分析而不是一种优化的手段。通过对象的作用范围的分析为其他优化手段提供分析数据从而进行优化。逃逸分析包括全局变量赋值逃逸方法返回值逃逸实例引用发生逃逸线程逃逸:赋值给类变量或可以在其他线程中访问的实例变量. public class EscapeAnalysis {public static Object object;public void globalVariableEscape(){//全局变量赋值逃逸object new Object();}public Object methodEscape(){ //方法返回值逃逸return new Object();}public void instancePassEscape(){ //实例引用发生逃逸this.speak(this);}public void speak(EscapeAnalysis escapeAnalysis){System.out.println(Escape Hello);}}使用方法逃逸的案例进行分析: public StringBuffer createString(String ... values){StringBuffer stringBuffer new StringBuffer();for (String string : values) {stringBuffer.append(string,);}return stringBuffer;}public static void main(String[] args) {StringBuffer sb new EscapeAnalysis().createString(Escape,Hello);System.out.println(sb.toString());}从上面的案例我们看出stringBuffer是属于方法返回值逃逸。我们可以通过改变返回值得类型为String限定了StringBuffer的作用域在createString方法中从而不发生逃逸。 public String createString(String ... values){StringBuffer stringBuffer new StringBuffer();for (String string : values) {stringBuffer.append(string,);}return stringBuffer.toString();}public static void main(String[] args) {String string new EscapeAnalysis().createString(Escape,Hello);System.out.println(string);}一、标量替换 1.标量和聚合量标量即不可被进一步分解的量而JAVA的基本数据类型就是标量(如intlong等基本数据类型以及reference类型等)标量的对立就是可以被进一步分解的量而这种量称之为聚合量。而在JAVA中对象就是可以被进一步分解的聚合量。 2.替换过程通过逃逸分析确定该对象不会被外部访问并且对象可以被进一步分解时JVM不会创建该对象而会将该对象成员变量分解若干个被这个方法使用的成员变量所代替。这些代替的成员变量在栈帧或寄存器上分配空间。二 、栈上分配我们通过JVM内存分配可以知道JAVA中的对象都是在堆上进行分配当对象没有被引用的时候需要依靠GC进行回收内存如果对象数量较多的时候会给GC带来较大压力也间接影响了应用的性能。为了减少临时对象在堆内分配的数量JVM通过逃逸分析确定该对象不会被外部访问。那就通过标量替换将该对象分解在栈上分配内存这样该对象所占用的内存空间就可以随栈帧出栈而销毁就减轻了垃圾回收的压力。测试逃逸分析后堆内存对比 private int count 1000000;public static void main(String[] args) throws InterruptedException, IOException {EscapeAnalysis escapeAnalysis new EscapeAnalysis();for (int i 0; i escapeAnalysis.count ; i) {escapeAnalysis.getAge();}Thread.sleep(500);for (int i 0; i escapeAnalysis.count ; i) {escapeAnalysis.getAge();}System.in.read();}public int getAge(){Person person new Person(小明,18,28.1);return person.getAge();}class Person {private String name;private int age;private double weight;public Person(String name, int age, double weight) {super();this.name name;this.age age;this.weight weight;}public String getName() {return name;}public void setName(String name) {this.name name;}public int getAge() {return age;}public void setAge(int age) {this.age age;}public double getWeight() {return weight;}public void setWeight(double weight) {this.weight weight;}}1.通过jps查看Class的Main进程的PID: 关闭逃逸分析的数据 C:\Users\lijps1321616592 EscapeAnalysis56401730817916 Jps9308 RemoteMavenServer 启用逃逸分析的数据在JDK1.8是默认开启逃逸分析 C:\Users\lijps1321613412 Jps5640173086460 EscapeAnalysis7100 EscapeAnalysis9308 RemoteMavenServer2.通过jmap -histo [pid]查看java堆上的对象分布情况: 关闭逃逸分析的数据 C:\Users\lijmap -histo 16592num #instances #bytes class name----------------------------------------------1: 980000 31360000 test.EscapeAnalysis$Person2: 154 785000 [I3: 2158 288504 [C4: 489 55832 java.lang.Class5: 2017 48408 java.lang.String6: 839 33560 java.util.TreeMap$Entry 启用逃逸分析的数据 C:\Users\lijmap -histo 7100num #instances #bytes class name----------------------------------------------1: 229881 7356192 test.EscapeAnalysis$Person2: 446 756944 [I3: 3105 442024 [C4: 2408 57792 java.lang.String通过上面数据可以看出没有开启逃逸分析时Person在堆的内存是31360000 而开启逃逸分析时Person在堆中的内存为7356192。 两者之间相差24003808。证明了启用了逃逸分析可以减少堆内存的使用和减少GC。三、同步消除同步消除是java虚拟机提供的一种优化技术。通过逃逸分析可以确定一个对象是否会被其他线程进行访问如果对象没有出现线程逃逸那该对象的读写就不会存在资源的竞争不存在资源的竞争则可以消除对该对象的同步锁。 public String createString(String ... values){StringBuffer stringBuffer new StringBuffer();for (String string : values) {stringBuffer.append(string );}return stringBuffer.toString();}public static void main(String[] args) {long start System.currentTimeMillis();EscapeAnalysis escapeAnalysis new EscapeAnalysis();for (int i 0; i 1000000; i) {escapeAnalysis.createString(Escape, Hello);}long bufferCost System.currentTimeMillis() - start;System.out.println(craeteString: bufferCost ms);} -server -XX:DoEscapeAnalysis -XX:-EliminateLockscraeteString: 202 ms-server -XX:DoEscapeAnalysis -XX:EliminateLockscraeteString: 173 ms我们可以通过测试结果看出如果开启了同步消除在开启同步消除的执行效率比没有开启同步消除的高。Reference
http://www.yutouwan.com/news/417512/

相关文章:

  • 上海建设银行网站招聘四川建设网有限公司
  • 惠州网站建设模板石家庄房产网站官网
  • 手机站制作的网站架构wordpress访问计数器
  • 英德建设网站镜像网站做排名
  • 纪检监察网站建设安徽安庆区号
  • 网站域名等级flash 网站 源码
  • 泰钢材企业网站源码网址查询备案信息
  • 先做网站还是服务器wordpress gif封面
  • 网站建设需要域名吗Wordpress自建主题视频百度云下载
  • 摩托车网站建设模板素材
  • 国外做网站推广网站上传的图片怎么做的清晰度
  • 温州seo网站建设wordpress标题太长
  • 中国建设工程网官方网站php 电子商务网站建设
  • 开发网站实训的心得体会郑州网站优化公司平台
  • 做视频营销哪个网站好网店美工具体要求
  • 家居企业网站建设流程沈阳紧急通知
  • 济南市网站建设关于花卉的网站怎么做
  • 上海招聘网官方网站兴力网站建设
  • 设计素材网站排版搭建一个网站平台需要多少钱
  • 那个网站做车险分期做交易网站需要用到的软件有哪些
  • 网站建设专家推荐乐云seo一键logo生成器在线
  • 石嘴山网站建设万维网站
  • 泰安电脑网站建设电话秦皇岛软件开发培训
  • appstore下载免费软件金华百度seo
  • 网站首页ui新西兰网站后缀
  • 物流网站开发策划西安做网站公司那家好
  • 淮安市广德育建设网站网站开发关于安全问题
  • window服务器如何做网站访问网络营销策划的主要特点
  • 福建网站开发定制wordpress悬浮按钮
  • 做游戏网站要备案吗维护一个网站需要多少钱