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

揭阳网站设计公司民宿网站的建设

揭阳网站设计公司,民宿网站的建设,php wordpress xmlrpc,重庆最新新闻头条申明#xff1a;文章内容是本人学习极客时间课程所写#xff0c;文字和图片基本来源于课程资料#xff0c;在某些地方会插入一点自己的理解#xff0c;未用于商业用途#xff0c;侵删。 原资料地址#xff1a;课程资料 对象的创建 常量池检查:检查new指令是否能在常量池…申明文章内容是本人学习极客时间课程所写文字和图片基本来源于课程资料在某些地方会插入一点自己的理解未用于商业用途侵删。 原资料地址课程资料 对象的创建 常量池检查:检查new指令是否能在常量池中定位到这个类的符号引用检查类之前是否被加载过。如果已经加载则直接使用否则需要进行加载。 分配内存空间 有两种方式 指针碰撞 由Serial 和 ParNew去回收空闲列表 有CMS和Mark-Sweep回收 必要信息的设置对象的元数据对象哈希码GC分代年龄 - 对象头 指针碰撞往往是一片连续的区域空闲列表是非连续的。 内存分配存在的问题 1 线程安全问题因为堆是共享的如果多个线程同时执行可能存在线程安全问题。 解决方案 1 通过CAS乐观锁:IVM虚拟机采用CAS失败重试的方式保证更新操作的原子性 2TLAB (Thread LocalAllocation Buffer) 本地线程分配缓存预分配也就是先给这个线程分配一个私有的内存这样就不会有并发问题 分配主流程:首先从TLAB里面分配如果分配不到再使用CAS从堆里面划分 分配内存分配是是老年代还是年轻代 内存的分配大多数new出来的对象都是新生代但是也有部分会去到老年代比如大对象在新生代无法放下。 必要信息设置 对象类的元数据对象哈希码GC分带年龄存储在对象头中 对象进入老年代 进入老年代的条件 1 存活年龄太大默认超过15次【-XX:MaxTenuringThreshold】GC过程中会讲 1 在MinorGC的时候存活的对象会被复制到幸存区域年龄 1 2 下一次GC的时候幸存取的对象和Eden的对象存活的对象会被复制到第二块幸存区域 年龄 1 3 这样来回复制如果对象的年龄大于15就会放入老年代可以修改这个值 2 动态年龄判断MinorGC之后发现Survivor区中的一批对象的总大小大于了这块Survivor区的50%那么就会将此时大于等于这批对象年龄最大值的所有对象直接进入老年代。 -XX:TargetSurvivorRatio可以指定 举个栗子Survivor区中有一批对象年龄分别为年龄1年龄2年龄n的多个对象对象总和大小超过了Survivor区域的50%此时就会把年龄n及以上的对象都放入老年代。 为什么会这样 希望那些可能是长期存活的对象尽早进入老年代。 3 大对象直接进入老年代前提是Serial和ParNew收集器 大对象可以通过这个参数去配置 -XX:PretenureSizeThreshold 一般设置为1M 举个栗子字符串或数组 为什么会这样为了避免大对象分配内存时的复制操作降低效率。避免了Eden和Survivor区的复制 空间担保机制当新生代无法分配内存的时候我们想把新生代的老对象转移到老年代然后把新对象放入腾空的新生代。此种机制我们称之为内存担保。 4 MinorGC后存活对象太多无法放入Survivor MinorGC前判断老年代可用内存是否小于新时代对象全部对象大小如果小于则继续判断老年代可用内存大小是否小于之前每次MinorGC后进入老年代的对象平均大小 如果是则会进行一次FullGC判断是否放得下放不下OOM 如果否代表老年代能放下则会进行MinorGC MinorGC后剩余存活对象小于Survivor区大小直接进入Survivor区 MinorGC后剩余存活对象大于Survivor区大小但是小于老年代可用内存直接进入老年代 MinorGC后剩余存活对象大于Survivor区大小也大于老年代可用内存进行FullGC FullGC之后任然没有足够内存存放MinorGC的剩余对象就会OOM 案例1,大对象直接进入老年区 // -Xmx60m -Xms60m -XX:NewRatio2 -XX:SurvivorRatio8 -XX:PrintGCDetails // Xmx 程序运行时最大内存大小 // Xms 程序启动时最大内存大小 // NewRatio 年轻代和老年代的比例为12 // SurvivorRatio survivor区域和eden 区域的内存比例 1 8 // PrintGCDetails 打印详细日志 public static void main(String[] args) {byte[] buffer new byte[1024*1024*20];}由这个例子我们可以得出结论因为年轻代的内存总共也就18M左右导致年轻代无法存放我们创建的20M大小的数组所以直接放入到了老年代。 案例2 // -Xmx600m -Xms600m -XX:PrintGCDetails public class HeapInstance {public static void main(String[] args) {ListPicture list new ArrayList();while (true) {try {Thread.sleep(20);} catch (InterruptedException e) {e.printStackTrace();}list.add(new Picture(new Random().nextInt(1024 * 1024)));}} }public class Picture {private byte[] pixels;public Picture(int length){this.pixels new byte[length];} }与前面的描述呼应进行三次FG后任然无法分配内存则OOM。整个过程大致是这样我们不断地创建对象然后Eden区逐渐被占满从而一部分对象复制到幸存区然后幸存区这个过程中会有动态年龄的判断来回复制放不下了进入老年区直到老年区也无法放下就内存溢出。 案例3,动态内存担保机制的演示 空间担保机制当新生代无法分配内存的时候我们想把新生代的老对象转移到老年代然后把新对象放入腾空的新生代。此种机制我们称之为内存担保。 // -Xms20M -Xmx20M -Xmn10M -XX:PrintGCDetails -XX:SurvivorRatio8 -XX:UseSerialGC // 初始内存 最大内存 年轻第空间 public class Demo {private static final int _1MB 1024 * 1024;public static void main(String[] args) {memoryAllocation();}public static void memoryAllocation() {byte[] allocation1, allocation2, allocation3, allocation4;allocation1 new byte[1 * _1MB];//1Mallocation2 new byte[1 * _1MB];//1Mallocation3 new byte[1 * _1MB];//1Mallocation4 new byte[5 * _1MB];//5MSystem.out.println(完毕);} }JVM参数 可以看到老年代存了一个大约3M的对象年轻代存大约6M的一个对象。 那么它执行的流程是这样的前面3M的对象在eden区域分配后后面来了一个5M的对象发现内存不足于是将之前3M 的数据移入了老年代之后将5M的数据放入新生代这就是内存担保机制。
http://www.hkea.cn/news/14378646/

相关文章:

  • 网站多语言包山东省建设厅的网站
  • 网站建设明薇通网络售后好网络营销就是建立企业网站
  • 佛山 两学一做 网站成都企业网站设计服务商
  • 2018年做返利网站环保网站可以做哪些方面
  • 网站规划的原则如何开一家网站建设公司?
  • 福建路桥建设有限公司网站如何安装wordpress博客
  • 青岛菜西有做网站的吗深圳公司排名前100名
  • 南阳做网站的公司中国纵横168网站建设系统
  • 网站浏览器兼容性问题做网站搭建需要什么人
  • 安徽省途顺建设工程有限公司网站网页版微信登录提示二维码已失效
  • 网站开发方案服装网站简介网店运营工资一般多少
  • 专门做礼品的网站广西壮族自治区建设厅网站
  • 自适应网站的优劣有网址吗给个谢谢急贴吧
  • 网站建设鼠标点击变色怎么弄徐州建设工程网官网
  • 珠宝首饰网站开发三河建设局网站
  • 免费网站自己做wordpress reset
  • 芜湖哪里做网站网络工程师主要做什么
  • 手机能访问asp网站网站设计优化
  • 东莞网站建设aj博客赣州网络
  • 网店装修视频seo运营是什么
  • 门户类网站开发多少钱大连网络运营
  • wordpress开发文档下载云南seo刷关键词排名优化
  • 做拍卖网站有哪些wordpress动态图片
  • 网站建设的图片网络推广教程
  • 阿里能帮做网站吗惠通网站建设
  • 石家庄网站建设电商制作公司网站流程
  • 做网站好wordpress 模版标签
  • 合肥网站制作公司有哪些公司中国最厉害的网站建设公司
  • wordpress 多层分类徐州低价seo
  • 企业网站建设建设高碑店市建设局网站