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

南昌做网站的公司/seo咨询师招聘

南昌做网站的公司,seo咨询师招聘,平台网站开发风险,代做网站多少钱1. Java对象分配流程 2. 栈上分配 2.1 本质:Java虚拟机提供的一项优化技术 2.2 基本思想: 将线程私有的对象打散分配在栈上 2.3 优点: 2.3.1 可以在函数调用结束后自行销毁对象,不需要垃圾回收器的介入,有效避免垃圾回…

1. Java对象分配流程

    

2. 栈上分配

    2.1 本质:Java虚拟机提供的一项优化技术

    2.2 基本思想: 将线程私有的对象打散分配

    2.3 优点:

       2.3.1 可以在函数调用结束后自行销毁对象,不需要垃圾回收器的介入,有效避免垃圾回收带来的负面影响

       2.3.2 栈上分配速度快,提高系统性能

    2.4 局限性: 栈空间小,对于大对象无法实现栈上分配

    2.4 技术基础: 逃逸分析

        2.4.1 逃逸分析的目的: 判断对象的作用域是否超出函数体[即:判断是否逃逸出函数体]

//user的作用域超出了函数setUser的范围,是逃逸对象
//当函数结束调用时,不会自行销毁user
private User user;
public void setUser(){user = new User();user.setId(1);user.setName("blueStarWei");
}//u只在函数内部生效,不是逃逸对象
//当函数调用结束,会自行销毁对象u
public void createUser(){User u = new User();u.setId(2);u.setName("JVM");
}

    2.5 栈上分配示例

package com.blueStarWei.templet;public class AllotOnStack {public static void main(String[] args) {long start = System.currentTimeMillis();for (int i = 0; i < 100000000; i++) {alloc();}long end = System.currentTimeMillis();System.out.println(end - start);}private static void alloc() {User user = new User();user.setId(1);user.setName("blueStarWei");}
}

        2.5.1 上述代码调用了1亿次alloc(),如果是分配到堆上,大概需要1.5GB的堆空间,如果堆空间小于该值,必然会触发GC。

        2.5.2 使用如下参数运行,发现不会触发GC

-server -Xmx15m -Xms15m -XX:+DoEscapeAnalysis -XX:+PrintGC -XX:-UseTLAB -XX:+EliminateAllocations

       2.5.3 使用如下参数(任意一行)运行,会发现触大量GC

//不使用逃逸分析
-server -Xmx15m -Xms15m -XX:-DoEscapeAnalysis -XX:+PrintGC -XX:-UseTLAB -XX:+EliminateAllocations//不使用标量替换
-server -Xmx15m -Xms15m -XX:+DoEscapeAnalysis -XX:+PrintGC -XX:-UseTLAB -XX:-EliminateAllocations

        2.5.3.1 可以发现:栈上分配依赖于逃逸分析标量替换 

    2.5.4 GC日志

[GC (Allocation Failure)  4095K->528K(15872K), 0.0025208 secs]
[GC (Allocation Failure)  4624K->552K(15872K), 0.0012518 secs]
[GC (Allocation Failure)  4648K->608K(15872K), 0.0009262 secs]
......(省略)
3718

        2.5.4.1 GC日志解析

参数

作用

备注

   GC

 用来区分是 Minor GC 还是 Full GC 的标志(Flag). 

这里的 GC 表明本次发生的是 Minor GC.

Allocation Failure
引起垃圾回收的原因. 本次GC是因为年轻代中没有任何合适的区域能够存放需要分配的数据结构而触发的.
4095K->528K
 在本次GC之前和之后的年轻代内存使用情况. 本次GC前,年轻代使用空间4095K, GC后年轻代使用空间为528K
(15872K)
 年轻代的总的大小 
0.0025208 secs
 本次GC使用时间(单位:秒) 

      2.5.5 JVM参数解析

参数作用备注
-server
使用server模式只有在server模式下,才可以弃用逃逸分析
-Xmx15m
设置最大堆空间为15m如果在堆上分配,必然触发大量GC
-Xms15m
设初始对空间为15m 
-XX:+DoEscapeAnalysis
启用逃逸分析默认启用
-XX:-DoEscapeAnalysis
关闭逃逸分析 
-XX:+PrintGC
打印GC日志 
   -XX:-UseTLAB 关闭TLAB

 TLAB(Thread Local Allocation Buffer)

线程本地分配缓存区

-XX:+EliminateAllocations
启用标量替换,允许对象打散分配到栈上

默认启用

-XX:-EliminateAllocations
 关闭标量替换 

 

3. TLAB 分配

  TLAB,全称Thread Local Allocation Buffer, 即:线程本地分配缓存。这是一块线程专用的内存分配区域TLAB占用的是eden区的空间。在TLAB启用的情况下(默认开启),JVM会为每一个线程分配一块TLAB区域。

    3.1 为什么需要TLAB?

  这是为了加速对象的分配。由于对象一般分配在堆上,而堆是线程共用的,因此可能会有多个线程在堆上申请空间,而每一次的对象分配都必须线程同步,会使分配的效率下降。考虑到对象分配几乎是Java中最常用的操作,因此JVM使用了TLAB这样的线程专有区域来避免多线程冲突,提高对象分配的效率。

    3.2 局限性: TLAB空间一般不会太大(占用eden区),所以大对象无法进行TLAB分配,只能直接分配到堆上。

    3.3 分配策略:

  一个100KB的TLAB区域,如果已经使用了80KB,当需要分配一个30KB的对象时,TLAB是如何分配的呢?

    此时,虚拟机有两种选择:第一,废弃当前的TLAB(会浪费20KB的空3.4 间);第二,将这个30KB的对象直接分配到堆上,保留当前TLAB(当有小于20KB的对象请求TLAB分配时可以直接使用该TLAB区域)。

  JVM选择的策略是:在虚拟机内部维护一个叫refill_waste的值,当请求对象大于refill_waste时,会选择在堆中分配,反之,则会废弃当前TLAB,新建TLAB来分配新对象。

  【默认情况下,TLAB和refill_waste都是会在运行时不断调整的,使系统的运行状态达到最优。】

    3.4 JVM参数解析

参数作用备注
-XX:+UseTLAB启用TLAB默认启用
-XX:TLABRefillWasteFraction设置允许空间浪费的比例默认值:64,即:使用1/64的TLAB空间大小作为refill_waste值
-XX:-ResizeTLAB禁止系统自动调整TLAB大小 
-XX:TLABSize指定TLAB大小单位:B


4. 附件 

    4.1 User类

packagepackag  com.blueStarWei.templet;public class User {private int id;private String name;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}}

 

5. 参考文献

    5.1 《实战Java虚拟机 - JVM故障诊断与性能优化》

    5.2  栈上分配、TLAB : https://blog.csdn.net/yangsnow_rain_wind/article/details/80434323

    5.3  快速解读GC日志 : https://blog.csdn.net/renfufei/article/details/49230943

转载于:https://www.cnblogs.com/BlueStarWei/p/9358757.html

http://www.jmfq.cn/news/5263795.html

相关文章:

  • 荆州做网站公司/网络营销的内容
  • 作风建设年网站/南宁优化推广服务
  • wiki能用wordpress/西安seo优化培训机构
  • 合肥市城乡建设委员会网站/青岛网站建设公司
  • 全面的手机网站建设/上海网站建设咨询
  • 全屏背景网站如何做到自适应/平台外宣推广技巧
  • 两栏式网站/在线crm网站
  • 华为云云速建站怎样/冯耀宗seo教程
  • 网站开发使用框架原因/西安seo外包行者seo06
  • 微信网站开发视频教程/找回原来的百度
  • 开发网站开奖类游戏需要什么技术/谷歌外贸
  • 软文推广是什么意思?/西安seo诊断
  • 做网站用c语言吗/企业网站营销的典型案例
  • 天津公司网站建设费/自动seo系统
  • 怎样在阿里巴巴上做网站/交换链接平台
  • 织梦末班和dw建设网站哪个方便优化/百度推广登录页面
  • 建立个人网站要钱吗/手机网站怎么优化关键词
  • 聊城建设网站/品牌推广运营策划方案
  • 网站被挂马做js跳转/挖掘爱站网
  • 门户网站设计技巧/2023年7 8月十大新闻
  • 360网站卖东西怎么做的/怎么找当地的地推团队
  • 微信商城app/免费发布网站seo外链
  • 自己做微网站制作教程/爱站网官网
  • 搜狗搜索网站提交入口/游戏广告投放平台
  • 网站开发 文件上传慢/地推拉新app推广接单平台
  • flash建网站教程/推广引流工具
  • 给女朋友做的生日网站/宁波网站制作优化服务公司
  • 做网站js还是jq/网络营销公司招聘
  • 做企业网站代码那种好/搜外滴滴友链
  • 河北企业网站设计/品牌营销策划ppt