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

php免费企业网站源码哈尔滨最新消息

php免费企业网站源码,哈尔滨最新消息,国内b2b网站大全排名,自己做的网站怎么绑域名1.什么是JVM? JVM就是Java虚拟机【Java Virtual Machine】,简称JVM。主要部分包括类加载子系统,运行时数据区,执行引擎,本地方法库等,接下来我们一一介绍 2.类加载子系统 JVM中运行的就是我们日常写的JA…

1.什么是JVM?

JVM就是Java虚拟机【Java Virtual Machine】,简称JVM。主要部分包括类加载子系统运行时数据区,执行引擎,本地方法库等,接下来我们一一介绍

2.类加载子系统

JVM中运行的就是我们日常写的JAVA代码,代码经过编译加生成.class文件,在经过类加载子系统加载到内存中,如图:
在这里插入图片描述

3.JVM运行时数据区

在这里插入图片描述

3.1方法区(内存共享)

存储的就是类对象,包括类方法和对象方法
存储数据是公共的,所有线程都可以访问这个区域

补充:方法区别称
JDK7称为永久代
JDK8及以后称为元空间

补充**:如何区别类方法和对对象方法?**
对象方法调用时会有一个隐式this引用,表示当前对象自己,而类对象全局统一。

3.2堆(内存共享)

用来存放在代码中用new关键字创建的对象。也是JVM中内存使用最大的区域

3.3JAVA虚拟机栈(线程私有)

每创建一个线程都会在内存中创建一个对应的虚拟机栈,栈中存放的是栈帧。
该线程每调用一个方法虚拟机中就会入栈一个栈帧,栈帧中存储的信息与该方法息息相关,主要包括局部变量表,操作站栈,动态连接,方法返回地址,如图:
在这里插入图片描述
所以当某线程虚拟机栈空了,也就说明该线程中的方法已经执行完毕,反之亦然。

3.4本地方法栈

调用本地方法时使用的栈

3.5程序计数器(线程私有)

用来记录线程当前执行到了哪一行,下次CPU调度时从计数器位置开始执行,(多线程)

搞懂了这些部分分别是做什么的,我们再来说**.class文件时如何被JVM加载并运行**

1.类加载子系统把.class文件加载到运行时数据区。

2.将类对象,类方法和对象方法存在方法区,后续new对象可以直接从这里找到模板,以便进行对象创建操作。

3.new 出来的对象全部放在堆区。

4.创建的每个线程分配一个虚拟机栈,线程中被调用的方法信息记录在栈帧中并依次入栈,可以说栈中存的是线程对方法的调用层级

5.本地方法栈中存的是本地方法的调用层级。

6.程序计数器,记录的是当前线程的执行的行号。

4.JVM类加载过程

在这里插入图片描述

4.1加载

通过类的全限定名找到所有的.class文件,加载到内存中

4.2验证

验证.class文件是否符合JVM标准

4.3准备

为静态变量以及静态方法分配内存空间并按照数据类型设置初始值(例如:int 初始值为0)。

4.4解析

JVM把常量池中的符号引用(例如:int 符号引用为I)替换为真实引用

4.5初始化

执行类的初始化代码(被static修饰的)

4.6使用

使用的也就是刚刚加载的类,所以使用阶段也是new对象,执行构造方法和父类构造方法的阶段。

4.7卸载

程序停止时–从JVM中卸载。

5.双亲委派模型

双亲委派模型是Java类加载器的一种工作模式,该模式主要用于JVM类加载阶段,用于保证JDK中定义的类不被恶意修改。以下是它的工作图:
在这里插入图片描述
具体流程:
1.当创建一个类时,先从应用加载器开始向上转发,一直到启动加载器
2启动加载器在自己路径下找这个类,若找到则加载,没有则向下转发给扩展加载器
3.扩展加载器在自己路径下找这个类,若找到则加载,没有则向下转发给应用程序加载器
4.应用程序加载器在自己路径下找这个类,找到则加载,找不到则报异常或错误

6.垃圾回收

说完了类的加载和卸载,我们来讲对象是如何被回收的,毕竟我们前面讲堆区是JVM中使用内存最大的区域,为什么最大?因为程线程中创建的各种对象多呗,有时一个对象被创建可能仅仅使用一次就不用了,对于这些对象我们要及时回收,不然放那不管是占内存的。

那垃圾回收中的“垃圾”其实也就是不再使用的对象,垃圾回收也就是回收对象占用的堆内存。

所以问题就在于如何标识对象是否死亡?

6.1引用计数算法

核心思想:对于堆中对象,引用一次计数加一,消除引用一次计数减一,当堆中对象引用计数为0时表示该对象已经死亡。

该算法缺点:内存泄漏----堆中某个对象对应的内存空间永远也回收不了。
举个例子:
在这里插入图片描述
经过上诉一番操作,t1对象和t2对象虽然还未死,但是:t1.instance所引用的对象永远也访问不了,那这个内存就回收不了,所以这种算法我们一般不用。

6.2可达性分析算法

核心思想:通过某一个根节点(GC root)出发访问不到某个对象,则判定该对象死亡,本轮GC标记,下轮GC回收内存空间。

6.3标记-清除算法

判定哪些对象已死亡需要回收我们OK了,那么如何回收死亡对象呢?

首先登场的时标记-清除算法,工作原理如下图:
在这里插入图片描述
GC:一次垃圾回收,垃圾回收的时候会停止所有用户进程(STW,Stop The World)

缺点:会产生大量不连续的空间碎片(看图也能看出来)
导致如果有一个大对象将会没有足够的内存空间存放-------》导致再次触发GC-------》再次触发STW,而GC的时间是不可控的,一秒一天一周都有可能,随着计算机和网络的发展,这样的时间成本是不可接受的。

6.4复制算法

工作原理如下图:
在这里插入图片描述
核心思想:将内存区域划分为两个大小相等的区域,区域1来放对象,区域2暂时空闲,当GC开始时,先将区域未死亡对象复制到区域2并按照内存地址顺序整理好,然后全面清除区域1,完成一次完整GC。

优点:解决了内存空间不连续的问题
缺点:空间利用率不高,只有一半,如果要存储8G对象就要准备至少16G空间。

6.5标记整理算法

核心思想:每回收一次对象后,将剩余对象向一端整理。,具体如下图:
在这里插入图片描述
核心思想:在回收死亡对象之后将剩余对象向一端移动
优点:空间利用率提升了,不再是50%了。
缺点:在移动对象的过程中效率势必会受很大影响。

6.6分代算法(GC中真正使用的算法)

核心思想:将整个内存区域分为新生代(占内存三分之一)和老年代(占内存三分之二)
新生代用来存放刚new 出来的对象,大部分“朝生暮死”老年代用来存放在新生代经历多次GC而未被回收的对象。
新生代采用复制算法,老年代采用标记-整理算法
新生代又分为Eden区,From区和To区,Eden区占新生代内存的五分之四,剩余由From区和To区占有。

具体回收过程如下图:
在这里插入图片描述
每个对象的对象头中有一个字段记录着该对象“年龄”,每GC一次而未被回收则年龄加一,在新生代中,年龄超过某个特定值(一般默认为15)则会被强制移到老年代。

http://www.15wanjia.com/news/46693.html

相关文章:

  • 网站源码 下载seo工具包
  • 动态网站设计与制作毕业论文游戏推广平台代理
  • 建网站做代理ipseo排名是什么
  • 专做男装的网站保定网站建设公司哪家好
  • php原生态开发公司网站seo具体是什么
  • discuz建网站品牌传播策划方案
  • 找最新游戏做视频网站seo收录查询
  • 新手网站现在做百度推广有用吗
  • 沈阳网站建设找思路深圳网络推广培训中心
  • 南昌网站建设利润百度站长工具抓取诊断
  • 做家政网站公司名称互联网营销的十五种方式
  • 医院建设官方网站必要性高报师培训机构排名
  • 网站建设的费用预算中国世界排名
  • 公司改名字重新备案网站会停吗合肥网络推广公司
  • 吾爱wordpress如何网站seo
  • 做网站哪里便宜火锅店营销方案
  • 网站开发项目经理工资百度下载安装到手机
  • 如何给企业做网站企业宣传片
  • 为澳门赌场做网站维护短视频推广平台有哪些
  • 罗定市政府公众网建设局网站如何注册网站怎么注册
  • 镇江市建设工程安全监督站网站高端网站建设哪家便宜
  • 做网站新科网站建设免费自助建站网站
  • qq群营销工具西安网站优化公司
  • 江油网站制作推广平台开户代理
  • wordpress固定链接403南京seo排名扣费
  • 做网站如何处理并发问题腾讯搜索引擎入口
  • 网站建设功能报价单百度指数移动版app
  • 企业网站建设方案有那些百度认证官网申请
  • 新建网站二级网页怎么做seo网站排名优化教程
  • 嵌入式培训机构有哪些厦门seo管理