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

网站的推广方法游戏特效培训机构排名

网站的推广方法,游戏特效培训机构排名,武汉 外贸网站建设公司,wordpress 商品 插件1. JVM内存模型 下图为JVM内存结构模型: 两种执行方式: 解释执行:JVM是由C语言编写的,其中有C解释器,负责先将Java语言解释翻译为C语言。缺点是经过一次JVM翻译,速度慢一点。JIT执行:JIT编译器…

1. JVM内存模型

下图为JVM内存结构模型:

运行时数据区.png

两种执行方式:

  • 解释执行:JVM是由C++语言编写的,其中有C++解释器,负责先将Java语言解释翻译为C++语言。缺点是经过一次JVM翻译,速度慢一点。
  • JIT执行:JIT编译器在程序运行时,会将频繁执行的热点代码的字节码编译为本地机器代码,并进行优化,然后把编译后的机器码缓存起来,以备下次使用,从而提高了程序的执行效率。但编译时间较长。

2. 运行时数据区

运行时数据区:java虚拟机在执行java程序的过程中会把他所管理的内存划分为若干个不同的数据区域。

  1. Java虚拟机栈(栈区)
  2. 本地方法栈
  3. Java堆(堆区)
  4. 方法区
  5. 程序计数器

直接内存:堆外内存,不是运行时数据区的一部分,但会被频繁使用。没有经过虚拟化。

5.1 程序计数器

  1. 作用:程序计数器就是行号指示器,是一块较小的内存空间,指向当前线程正在执行的字节码指令的地址。

    字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令。 分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。

  2. 线程是否共享:线程私有。

    为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各条线程 之间计数器互不影响,独立存储

如果正在执行的是本地方法,这个计数器值则应为空。

5.2 java虚拟机栈

  1. 作用:存储当前线程运行Java方法所需的数据、指令、返回地址。

  2. 线程是否共享:线程私有。

    启动一个线程创建一个虚拟机栈。虚拟机栈是线程私有的,栈的生命周期和线程是一样的。遵循先进后出原则。

  3. 栈帧:在每个Java方法被调用的时候,都会创建一个栈帧,并入栈。一旦方法完成相应的调用,则出栈。

  4. 栈帧结构

image.png

  • 局部变量表:用于存储方法参数和局部变量的值。存放了编译期可知的基本数据类型、对象引用、returnAddress类型。

    局部变量表所需的内存空间在编译期间完成分配,当进入一个方法时,这个方法需要在栈帧中分配多大的局部变量空间是完全确定的,在方法运行期间不会改变局部变量表的大小(局部变量槽(Slot)的数量)。

  • 操作数栈:用于存储计算过程中的操作数和中间结果。

  • 动态链接:将符号引用转换为直接引用的过程。

  • 方法出口:方法出口指向的是调用方法的指令地址,即调用方法的当前执行位置。当一个方法正常结束时,程序计数器(PC)将恢复到该地址,使得程序能够继续执行。

public class Test {public static void main(String[] args) {A();}private static void A() {B();}private static void B() {C();}private static void C() {}
}

image.png

  1. 栈大小虚拟机栈有大小限制。参数-Xss。默认值取决于平台。

    应用场景:系统内存吃紧情况下。

    系统剩下100M内存,一个线程堆栈大小默认1M,现在有200个线程分配内存。一般线程请求栈深度不会特别深,这时可以缩小栈大小-Xss256k。

  2. 可能产生的异常

    • StackOverError异常:线程请求栈深度 > 虚拟机所允许深度
    • OutOfMemoryError异常:如果Java虚拟机栈容量可以动态扩展,当栈扩展时无法申请到足够的内存

一个方法对应一个栈帧:

public class Student{public static void main(String[] args) throws Exception{Student student = new Student();student.study();}public int study() throws Exception{int a = 1;int b = 2;int c = (a + b) * 3;return c;}
}

以study()方法为例, 首先使用javap -c命令查看study()方法的字节码:

image.png
最左侧0~12代表字节码地址,字节码偏移量,程序计数器中会记录。程序运行时程序计数器会记录着运行方法字节码的行号。

image.png

当执行ireturn指令时,JVM会将当前方法的返回值(9)推送到调用方法的操作数栈中。

这里以int a = 1;为例,剩下大家可以结合 详细规范 自己进行分析。

5.3 本地方法栈

  1. 作用:本地方法栈与虚拟机栈类似,主要区别就是本地方法栈是用于存储本地方法(native)的内存区域。
public native int hashCode();
  1. 可能产生的异常
    • StackOverError异常:线程请求栈深度 > 虚拟机所允许深度
    • OutOfMemoryError异常:当栈扩展时无法申请到足够的内存

JVM里会有默认参数设置。

通过jps找到运行进程:

image.png

然后通过jinfo -flags 3104找到具体参数信息:

image.png 然后通过这些信息: JVM申请内存

5.4 Java堆

  1. 作用:唯一目的存放Java对象实例。

  2. 线程是否共享:线程共享。

    所有线程共享的一块区域,在虚拟机启动时创建。

  3. 大小:Java堆既可以被实现成固定大小的,也可以是可扩展的,不过当前主流的Java虚拟机都是按照可扩 展来实现的(通过参数-Xmx和-Xms设定)。

  4. 特点

    • JVM中内存最大
    • 是垃圾回收器管理的主要区域,也称GC堆
  5. 可能产生的异常

    • OutOfMemoryError异常:堆中没有足够的内存完成对象实例的分配,堆无法再扩展。

5.5 方法区

  1. 作用:用于存储已被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等数据。别名叫作“非堆”(Non-Heap)。
  2. 线程是否共享:线程共享。
  3. 可能产生的异常
    • OutOfMemoryError异常:方法区无法满足内存分配需求。
  4. 总结:该区域的内存回收主要是针对运行时常量池和对类的卸载。又称永久代:回收条件苛刻、很少出现垃圾收集。

5.6 运行时常量池

  1. 作用:运行时常量池是方法区的一部分。Class文件中除了有类的版本、字 段、方法、接口等描述信息外,还有一项信息是常量池表(Constant Pool Table),用于存放编译期生 成的各种字面量与符号引用,这部分内容将在类加载后存放到方法区的运行时常量池中。
  2. 可能产生的异常
    • OutOfMemoryError异常:常量池无法满足内存分配需求。
http://www.hkea.cn/news/293041/

相关文章:

  • 网站建设顺序镇江交叉口优化
  • 低价企业网站搭建软文新闻发布网站
  • 创造与魔法官方网站做自己喜欢的事seo视频
  • 淘宝联盟推广网站怎么做吉安seo招聘
  • 工程招聘网站如何免费制作自己的网站
  • 网站建设调研问卷搜易网托管模式的特点
  • 在哪个网站可以做java面试题宁德市蕉城区疫情
  • 2021年重大新闻事件seo快速工具
  • 拼多多网店南宁优化推广服务
  • 洛阳建筑公司排名长沙官网seo服务
  • 网站关键词优化公司哪家好企业网站seo点击软件
  • 做网站有必要?优化师培训
  • 网站怎么发布信息百度推广优化技巧
  • 西安软件培训百度百科优化排名
  • 网站上文章加入音乐是怎么做的网页代码
  • 深圳公布最新出行政策徐州seo招聘
  • wordpress的漏洞seo优化知识
  • 网站建设高端seo和sem分别是什么
  • 成交功能网站怎么推广自己的产品
  • 北京宣传片网站seo综合查询
  • 滨海网站建设公司百度指数的使用
  • 湛江网站建设外包seo到底是什么
  • 做收集信息的网站河源市企业网站seo价格
  • 有赞短链接生成汕头seo推广
  • 团队做网站分工搜索引擎案例分析结论
  • 企业网站的建设过程做整站优化
  • 最简单的cms网站怎么做惠州抖音seo
  • 做网站销售怎么开发客户自己做一个网站
  • wordpress发布文章空白整站优化 mail
  • vs怎么做网站的首页seo知识培训