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

重庆 网站设计内部卷网站怎么做的

重庆 网站设计,内部卷网站怎么做的,网站建设好怎么才有生意,百度游戏app下载Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域 有各自的用途#xff0c;以及创建和销毁的时间#xff0c;有的区域随着虚拟机进程的启动而一直存在#xff0c;有些区域则是 依赖用户线程的启动和结束而建立和销毁。 1. 程序计…Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域 有各自的用途以及创建和销毁的时间有的区域随着虚拟机进程的启动而一直存在有些区域则是 依赖用户线程的启动和结束而建立和销毁。 1. 程序计数器Program Counter Register 作用程序计数器是一块较小的内存空间它可以看作是当前线程所执行的字节码的行号指示器。字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。简化用来存储指向下一条指令的地址即将要执行的指令代码线程私有由于 Java 虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的在任何一个确定的时刻一个处理器对于多核处理器来说是一个内核都只会执行一条线程中的指令。因此为了线程切换后能恢复到正确的执行位置每条线程都需要有一个独立的程序计数器各条线程之间计数器互不影响独立存储。无内存溢出情况程序计数器是唯一一个在《Java 虚拟机规范》中没有规定任何 OutOfMemoryError 情况的区域。 2. Java 虚拟机栈Java Virtual Machine Stacks 作用与程序计数器一样Java 虚拟机栈也是线程私有的它的生命周期与线程相同。虚拟机栈描述的是 Java 方法执行的线程内存模型每个方法被执行的时候Java 虚拟机都会同步创建一个栈帧Stack Frame用于存储局部变量表、操作数栈、动态连接、方法出口等信息。每一个方法被调用直至执行完毕的过程就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。局部变量表存放了编译期可知的各种 Java 虚拟机基本数据类型boolean、byte、char、short、int、float、long、double、对象引用reference 类型它并不等同于对象本身可能是一个指向对象起始地址的引用指针也可能是指向一个代表对象的句柄或者其他与此对象相关的位置和 returnAddress 类型指向了一条字节码指令的地址。异常情况如果线程请求的栈深度大于虚拟机所允许的深度将抛出 StackOverflowError 异常如果 Java 虚拟机栈容量可以动态扩展当栈扩展时无法申请到足够的内存会抛出 OutOfMemoryError 异常。 3. 本地方法栈Native Method Stacks 作用本地方法栈与虚拟机栈所发挥的作用是非常相似的其区别只是虚拟机栈为虚拟机执行 Java 方法也就是字节码服务而本地方法栈则是为虚拟机使用到的本地Native方法服务。本地方法是使用非 Java 语言如 C、C实现的方法它们可以直接访问底层操作系统的资源。例如Java 程序有时需要与操作系统的底层功能进行交互比如文件操作、网络操作等。由于 Java 本身的跨平台性有些底层操作无法直接实现这时就需要借助本地方法。异常情况和虚拟机栈一样本地方法栈也会在栈深度溢出或者栈扩展失败时分别抛出 StackOverflowError 和 OutOfMemoryError 异常。 4. Java 堆Java Heap 作用Java 堆是被所有线程共享的一块内存区域在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例几乎所有的对象实例都在这里分配内存。从内存分配的角度来看线程共享的 Java 堆中可能划分出多个线程私有的分配缓冲区Thread Local Allocation BufferTLAB。不过无论如何划分都与存放内容无关无论哪个区域存储的都仍然是对象实例。垃圾回收的主要区域Java 堆是垃圾收集器管理的主要区域因此很多时候也被称作 “GC 堆”。根据垃圾收集算法的不同Java 堆还可以细分为新生代和老年代再细致一点有 Eden 空间、From Survivor 空间、To Survivor 空间等。异常情况如果在 Java 堆中没有内存完成实例分配并且堆也无法再扩展时Java 虚拟机将会抛出 OutOfMemoryError 异常。 5. 方法区Method Area 作用方法区是存放基础信息的位置线程共享。主要包含三部分内容1.类的元信息保存了所有类的基本信息2.运行时常量池保存了字节码文件中的常量池内容、3.字符串常量池保存了字符串常量运行时常量池是方法区的一部分Class 文件中除了有类的版本、字段、方法、接口等描述信息外还有一项信息是常量池表Constant Pool Table用于存放编译期生成的各种字面量与符号引用这部分内容将在类加载后存放到方法区的运行时常量池中。运行时常量池相对于 Class 文件常量池的另外一个重要特征是具备动态性Java 语言并不要求常量一定只有编译期才能产生也就是说并非预置入 Class 文件中常量池的内容才能进入方法区运行时常量池运行期间也可以将新的常量放入池中这种特性被开发人员利用得比较多的便是 String 类的 intern () 方法。异常情况当方法区无法满足新的内存分配需求时将抛出 OutOfMemoryError 异常。方法区的实现 JDK7及之前的版本将方法区存放在堆区域中的永久代空间堆的大小由虚拟机参数来控制。JDK8及之后的版本将方法区存放在元空间中元空间位于操作系统维护的直接内存中默认情况下只要不超过操作系统承受的上限可以一直分配。 6. 直接内存Direct Memory 作用直接内存并不是虚拟机运行时数据区的一部分也不是《Java 虚拟机规范》中定义的内存区域。但是这部分内存也被频繁地使用而且也可能导致 OutOfMemoryError 异常出现。在 JDK 1.4 中新加入了 NIONew Input/Output类引入了一种基于通道Channel与缓冲区Buffer的 I/O 方式它可以使用 Native 函数库直接分配堆外内存然后通过一个存储在 Java 堆里面的 DirectByteBuffer 对象作为这块内存的引用进行操作。这样能在一些场景中显著提高性能因为避免了在 Java 堆和 Native 堆中来回复制数据。异常情况由于直接内存不受 Java 堆大小的限制但是受本机总内存包括 RAM 及 SWAP 区或者分页文件大小以及处理器寻址空间的限制所以在动态分配直接内存时可能会出现 OutOfMemoryError 异常。 面试题 基础概念类 问题请简要介绍一下 JVM 运行时数据区域包含哪些部分 参考答案JVM 运行时数据区域主要包含以下几个部分 程序计数器线程私有可看作当前线程所执行的字节码的行号指示器是唯一不会出现 OutOfMemoryError 的区域。Java 虚拟机栈线程私有描述 Java 方法执行的线程内存模型每个方法执行会创建栈帧存储局部变量表、操作数栈等信息可能抛出 StackOverflowError 和 OutOfMemoryError 异常。本地方法栈与虚拟机栈类似为虚拟机使用的本地方法服务也可能抛出 StackOverflowError 和 OutOfMemoryError 异常。Java 堆线程共享是对象实例分配内存的主要区域也是垃圾收集器管理的主要区域可能抛出 OutOfMemoryError 异常。方法区线程共享用于存储已被虚拟机加载的类型信息、常量、静态变量等数据可能抛出 OutOfMemoryError 异常。运行时常量池是方法区的一部分存放编译期生成的字面量与符号引用具备动态性。直接内存不是虚拟机运行时数据区的一部分但也会被频繁使用可能导致 OutOfMemoryError 异常。 问题哪些区域是线程共享的哪些是线程私有的 参考答案线程共享的区域有 Java 堆、方法区包含运行时常量池线程私有的区域有程序计数器、Java 虚拟机栈、本地方法栈。 原理机制类 问题Java 虚拟机栈中栈帧的作用是什么包含哪些内容 参考答案栈帧是 Java 虚拟机栈中用于支持方法调用和方法执行的数据结构。每一个方法从调用开始到执行完成的过程都对应着一个栈帧在虚拟机栈中入栈到出栈的过程。栈帧包含以下内容 局部变量表用于存储方法参数和方法内部定义的局部变量。操作数栈在方法执行过程中用于存储中间计算结果和临时数据。动态连接将符号引用转换为直接引用实现方法的动态绑定。方法出口记录方法执行完毕后从哪个位置继续执行调用该方法的后续代码。 问题运行时常量池的动态性体现在哪里 参考答案运行时常量池的动态性体现在它并不局限于编译期生成的常量。Java 语言允许在运行期间将新的常量放入池中例如 String 类的 intern () 方法。当调用 intern () 方法时如果运行时常量池中已经包含一个等于此 String 对象的字符串则返回常量池中的字符串否则将此 String 对象添加到常量池中并返回该 String 对象的引用。 异常处理类 问题在 JVM 运行时数据区域中哪些区域可能会抛出 OutOfMemoryError 异常 参考答案可能抛出 OutOfMemoryError 异常的区域有 Java 堆、方法区、Java 虚拟机栈当栈容量可以动态扩展时、本地方法栈当栈容量可以动态扩展时和直接内存。例如当 Java 堆中没有足够的内存来分配新的对象实例并且堆也无法再扩展时会抛出 OutOfMemoryError 异常方法区无法满足新的内存分配需求时也会抛出该异常。问题StackOverflowError 和 OutOfMemoryError 有什么区别 参考答案StackOverflowError 通常是由于线程请求的栈深度大于虚拟机所允许的深度而抛出的异常一般是在递归调用方法时没有正确的终止条件导致栈帧不断入栈最终栈空间耗尽。而 OutOfMemoryError 是在无法申请到足够的内存时抛出的异常它可能发生在 Java 堆、方法区、虚拟机栈动态扩展时、本地方法栈动态扩展时和直接内存等区域。 应用场景类 问题在实际开发中如何优化 JVM 运行时数据区域的使用 参考答案可以从以下几个方面进行优化 对于 Java 堆合理设置堆的大小避免堆空间过大导致内存浪费或过小导致频繁的垃圾回收。可以根据应用程序的特点调整新生代和老年代的比例。对于方法区避免加载过多不必要的类及时卸载不再使用的类。可以通过设置合适的方法区大小避免方法区内存溢出。对于 Java 虚拟机栈合理控制方法调用的深度避免递归调用过深导致 StackOverflowError。可以适当调整栈的大小。对于直接内存合理使用 DirectByteBuffer避免过度分配直接内存。在使用完后及时释放直接内存资源。 问题请举例说明 JVM 运行时数据区域在多线程环境下的应用和可能遇到的问题。 参考答案在多线程环境下每个线程都有自己独立的程序计数器、Java 虚拟机栈和本地方法栈这些线程私有区域保证了线程之间的独立性。例如多个线程同时执行不同的方法时每个线程的栈帧操作互不干扰。而 Java 堆和方法区是线程共享的多个线程可能会同时访问和修改堆中的对象和方法区中的类信息。可能遇到的问题包括 线程安全问题多个线程同时访问和修改堆中的对象时可能会导致数据不一致的问题需要使用同步机制来保证线程安全。内存泄漏问题如果线程持有对堆中对象的引用而这些对象不再使用但线程没有及时释放这些引用可能会导致内存泄漏。竞争问题多个线程同时竞争方法区中的类加载锁时可能会导致性能下降。
http://www.ho-use.cn/article/10816717.html

相关文章:

  • wordpress安装百度站长资源平台网站数据库在空间吗
  • php做网站页面在哪做毕节地seo
  • 移动网站开发环境 主流国外服务器商
  • 家用电脑网站建设wordpress 发布时间
  • 自己做免费手机网站吗福州外文网站建设
  • IT科技资讯新闻类织梦网站模板电商入门基础知识
  • 做网站源码流程做微商代理去哪个网站
  • 网站集约化建设困难建设工程168网手机版下载
  • jsp网站服务建设是什么seo关键字排名
  • 做网站公司教程网站建设 广西
  • python 网站开发流程图建网页要钱吗
  • wordpress搜索页面不同系统优化大师官方下载
  • 开启wordpress多站点英网站建设
  • 徐州住房和城乡建设部网站网页怎么赚钱
  • 做游戏的网站有哪些移动网站建设解决方案
  • 网站做的跟别人的一样可以吗双语网站用什么程序做
  • 建设自己网站男女做那个网站动态图
  • 1小时快速搭建网站google搜索引擎入口下载
  • 株洲网站设计外包首选企业注册号
  • 网站备案信息可以更改吗有没有在网上做ps赚钱的网站
  • 如何搭建一个网站开发环境中国室内设计联盟网站
  • p2p金融网站开发腾讯公司网页设计
  • 成都医院网站建设网店代运营和推广销售
  • 新手怎么做电商在哪个网站2024年新闻热点事件摘抄
  • 中国互联网站建设大连企业网站设计
  • Dedecms手机网站源码做app需要学什么编程
  • 网站建设天地心网站代备案系统
  • 工程公司网站建设学校资源网站 建设
  • 百度资源站长平台青海和城乡建设厅网站
  • 云畅网站建设后台百度网站广告怎么做