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

东莞企业网站推广怎么做公司网站怎么做实名认证

东莞企业网站推广怎么做,公司网站怎么做实名认证,怎么把自己做的网站让别人收到,网页设计实训心得体会300字开发者都知道#xff0c;基本上所有对象都是在堆上创建。但是#xff0c;这里还是没有把话说绝对哈#xff0c;指的是基本上所有。昨天一位朋友在聊天中#xff0c;就说了所有对象都在堆中创建#xff0c;然后被朋友一阵的嘲笑。 开始我们的正文#xff0c;我们今天来聊聊… 开发者都知道基本上所有对象都是在堆上创建。但是这里还是没有把话说绝对哈指的是基本上所有。昨天一位朋友在聊天中就说了所有对象都在堆中创建然后被朋友一阵的嘲笑。 开始我们的正文我们今天来聊聊关于逃逸分析。 逃逸分析Escape Analysis是目前Java虚拟机中比较前沿的优化技术。这是一种可以有效减少Java 程序中同步负载和内存堆分配压力的跨函数全局数据流分析算法。通过逃逸分析Java Hotspot编译器能够分析出一个新的对象的引用的使用范围从而决定是否要将这个对象分配到堆上。 逃逸分析的基本原理是分析对象动态作用域当一个对象在方法里面被定义后它可能被外部方法所引用例如作为调用参数传递到其他方法中这种称为方法逃逸甚至还有可能被外部线程访问到譬如赋值给可以在其他线程中访问的实例变量这种称为线程逃逸从不逃逸、方法逃逸到线程逃逸称为对象由低到高的不同逃逸程度。 开启逃逸分析编译器可以对代码进行如下优化 同步消除如果一个对象被逃逸分析发现只能被一个线程所访问那对于这个对象的操作可以不同步。栈上分配如果确定一个对象不会逃逸出线程之外那让这个对象在栈上分配内存将会是一个很不错的主意对象所占用的内存空间就可以随栈帧出栈而销毁。标量替换如果一个对象被逃逸分析发现不会被外部方法访问并且这个对象可以拆散那么程序真正执行的时候将可能不去创建这个对象而改为直接创建它的若干个比这个方法使用的成员变量来代替。将对象拆分后可以让对象的成员变量在栈上分配和读写。 JVM中通过如下参数可以指定是否开启逃逸分析 -XX:DoEscapeAnalysis 表示开启逃逸分析JDK 1.7之后默认开启。 -XX:-DoEscapeAnalysis 表示关闭逃逸分析。 同步消除 线程同步本身是一个相对耗时的过程如果逃逸分析能够确定一个变量不会逃逸出线程无法被其他线程访问那么这个变量的读写肯定就不会有竞争对这个变量实施的同步措施也就可以安全地消除掉。 如以下代码 public void method() {Object o new Object();synchronized (o) {System.out.println(o);} }对对象o加锁但是对象o的生命周期与方法method()一样所以不会被其他线程访问到不会发生线程安全问题那么在JIT编译阶段会被优化为如下所示 public void method() {Object o new Object();System.out.println(o); }这也被称为锁消除。 栈上分配 在Java虚拟机中Java堆上分配创建对象的内存空间几乎是Java程序员都知道的常识Java堆中的对象对于各个线程都是共享和可见的只要持有这个对象的引用就可以访问到堆中存储的对象数据。虚拟机的垃圾收集子系统会回收堆中不再使用的对象但回收动作无论是标记筛选出可回收对象还是回收和整理内存都需要耗费大量资源。但是存在一种特殊情况如果逃逸分析确认对象不会逃逸出线程之外那么就可能被优化成栈上分配。这样就无需在堆上分配内存也无须进行垃圾回收了。 如以下代码 public static void main(String[] args) throws InterruptedException {for (int i 0; i 1000000; i) {alloc();}Thread.sleep(100000); }private static void alloc() {User user new User(); }代码很简单就是循环创建100万次使用alloc()方法创建100万个User对象。这里的alloc()方法中定义了User对象并没有被其他方法引用所以符合栈上分配的要求。 JVM参数如下 -Xmx2G -Xms2G -XX:DoEscapeAnalysis -XX:PrintGCDetails -XX:HeapDumpOnOutOfMemoryError 启动程序通过jmap工具查看实例数 jmap -histo pidnum #instances #bytes class name ---------------------------------------------- 1: 3771 2198552 [B 2: 10617 1722664 [C 3: 104057 1664912 com.miracle.current.lock.StackAllocationTest$User我们可以看到程序总共创建了104057个User对象远小于100万。我们可以关闭逃逸分析再来看下 -Xmx2G -Xms2G -XX:-DoEscapeAnalysis -XX:PrintGCDetails -XX:HeapDumpOnOutOfMemoryError 启动程序通过jmap工具查看实例数 jmap -histo 42928num #instances #bytes class name ----------------------------------------------1: 628 22299176 [I2: 1000000 16000000 com.miracle.current.lock.StackAllocationTest$User可以看到关闭逃逸分析后总共创建了100万个User对象。对比来看栈上分配对堆内存消耗GC都有着重要的作用。 标量替换 若一个数据已经无法再分解成更小的数据来表示了Java虚拟机中的原始数据类型int 、long 等数值类型及reference类型等都不能再进一步分解了那么这些数据就可以被称为标量。相对的如果一个数据可以继续分解那它就被称为聚合量AggregateJava中的对象就是典型的聚合量。 假如逃逸分析能够证明一个对象不会被方法外部访问并且这个对象可以被拆散那么程序真正执行的时候将可能不去创建这个对象而改为直接创建它的若干个被这个方法使用的成员变量来代替。 有如下代码 public static void main(String[] args) {method(); }private static void method() {User user new User(25);System.out.println(user.age); }private static class User {private int age;public User(int age) {this.age age;} }在method()方法中创建User对象指定age为25这里User不会被其他方法引用也就是说它不会逃逸出方法并且User是可以拆解为标量的。所以alloc()代码会优化为如下 private static void alloc() {int age 25;System.out.println(age); }总结 尽管目前逃逸分析技术仍在发展之中未完全成熟但它是即时编译器优化技术的一个重要前进方向在日后的Java虚拟机中逃逸分析技术肯定会支撑起一系列更实用、有效的优化技术。
http://www.w-s-a.com/news/730542/

相关文章:

  • 网站开发维护运维无人在线电视剧免费观看
  • 电子商务网站建设开题报告展馆网站建设
  • 门户网站建设的背景和意义手机网站前
  • 国内免费视频素材无水印素材网站国家最新消息
  • 襄阳seo站内优化学做网站论坛教程
  • 文明网站建设情况报告wordpress伪静态配置
  • 牙科网站模板个人微信网站建设
  • 厦门公司注册网站dw做简单小说网站
  • 网站建好以后每年都续费么wordpress 仿聚划算
  • 单位网站建设收费标准网上开店铺需要多少钱
  • 灯饰网站需要这么做申请域名的流程
  • 软件下载网站怎么赚钱wordpress减少数据库查询
  • 什么兼职网站可以做视频剪辑常见的推广平台有哪些
  • 网站开发是用html还是jsp设迹官网
  • 查公司信息的网站怎么学wordpress
  • 白银做网站长春一般建一个网站需要多少钱
  • 帮人做钓鱼网站的人网络推广培训职业学校
  • 淘宝客有必须做网站吗网站开发的形式有( )
  • 网站建设:上海珍岛网页版qq空间登录
  • 网站服务器ipteahouse wordpress主题
  • 深州市住房保障和城乡建设局网站做网站公司叫什么
  • 织梦网站转跳手机站注册公司代理记账费用
  • wordpress建站Pdf亚马逊aws在线观看
  • 做网站的外包公司有哪些WordPress调用json数据
  • 做网站网站怎么赚钱网站的建设及维护报告
  • 可以做效果图的网站东莞网站优化什么方法
  • 网站和软件的区别怎么做招生网站
  • 雄安免费网站建设电话如何做网站推广 求指点
  • 十大免费cad网站入口软件北京做网站建设价格
  • 建设一个公司网站要具备什么网页制作的专业