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

沧县网站建设公司网站文件app

沧县网站建设公司,网站文件app,做谱的网站,动画专业最好的大学在我的博客中#xff0c;之前有很多文章介绍过JVM内存结构#xff0c;相信很多看多我文章的朋友对这部分知识都有一定的了解了。 那么#xff0c;请大家尝试着回答一下以下问题#xff1a; 1、JVM管理的内存结构是怎样的#xff1f; 2、不同的虚拟机在实现运行时内存的…在我的博客中之前有很多文章介绍过JVM内存结构相信很多看多我文章的朋友对这部分知识都有一定的了解了。 那么请大家尝试着回答一下以下问题 1、JVM管理的内存结构是怎样的  2、不同的虚拟机在实现运行时内存的时候有什么区别  3、运行时数据区中哪些区域是线程共享的哪些是独享的  4、除了JVM运行时内存以外还有什么区域可以用吗  5、堆和栈的区别是什么  6、Java中的数组是存储在堆上还是栈上的  7、Java中的对象创建有多少种方式  8、Java中对象创建的过程是怎么样的  9、Java中的对象一定在堆上分配内存吗  10、如何获取堆和栈的dump文件 以上10道题如果您可以全部准确无误的回答的话那说明你真的很了解JVM的内存结构以及内存分配相关的知识了如果有哪些知识点是不了解的那么本文正好可以帮你答疑解惑。 JVM管理的内存结构是怎样的 Java虚拟机在执行Java程序的过程中会把他所管理的内存划分为若干个不同的数据区域。《Java虚拟机规范》中规定了JVM所管理的内存需要包括一下几个运行时区域 主要包含了PC寄存器程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区以及运行时常量池。 各个区域有各自不同的作用关于各个区域的作用就不在本文中相信介绍了。 但是需要注意的是上面的区域划分只是逻辑区域对于有些区域的限制是比较松的所以不同的虚拟机厂商在实现上甚至是同一款虚拟机的不同版本也是不尽相同的。 不同的虚拟机在实现运行时内存的时候有什么区别 前面提到过《Java虚拟机规范》定义的JVM运行时所需的内存区域不同的虚拟机实现上有所不同而在这么多区域中规范对于方法区的管理是最宽松的规范中关于这部分的描述如下 方法区在虚拟机启动的时候创建虽然方法区是堆的逻辑组成部分但是简单的虚拟机实现可以选择在这个区域不实现垃圾收集与压缩。本版本的规范也不限定实现方法区的内存位置和代码编译的管理策略。方法区的容量可以是固定的也可以随着程序执行的需求动态扩展并在不需要过多的空间时自行收缩。方法区在实际内存空间站可以是不连续的。 这一规定可以说是给了虚拟机厂商很大的自由。 虚拟机规范对方法区实现的位置并没有明确要求在最著名的HotSopt虚拟机实现中在Java 8 之前方法区仅是逻辑上的独立区域在物理上并没有独立于堆而存在而是位于永久代中。所以这时候方法区也是可以被垃圾回收的。 实践证明JVM中存在着大量的声明短暂的对象还有一些生命周期比较长的对象。为了对他们采用不同的收集策略采用了分代收集算法所以HotSpot虚拟机把的根据对象的年龄不同把堆分位新生代、老年代和永久代。 在Java 8中 HotSpot虚拟机移除了永久代使用本地内存来存储类元数据信息并称之为元空间Metaspace 运行时数据区中哪些区域是线程共享的哪些是独享的 在JVM运行时内存区域中PC寄存器、虚拟机栈和本地方法栈是线程独享的。 而Java堆、方法区是线程共享的。但是值得注意的是Java堆其实还未每一个线程单独分配了一块TLAB空间这部分空间在分配时是线程独享的在使用时是线程共享的。 除了JVM运行时内存以外还有什么区域可以用吗 除了我们前面介绍的虚拟机运行时数据区以外还有一部分内存也被频繁使用他不是运行时数据区的一部分也不是Java虚拟机规范中定义的内存区域他就是——直接内存。 直接内存的分配不受Java堆大小的限制但是他还是会收到服务器总内存的影响。 在JDK 1.4中引入的NIO中引入了一种基于Channel和Buffer的I/O方式他可以使用Native函数直接分配堆外内存然后通过一个存储在Java堆中的DirectByteBuffer对象作为这块内存的应用进行操作。 堆和栈的区别是什么 堆和栈虚拟机栈是完全不同的两块内存区域一个是线程独享的一个是线程共享的二者之间最大的区别就是存储的内容不同 堆中主要存放对象实例。  栈局部变量表中主要存放各种基本数据类型、对象的引用。 Java中的数组是存储在堆上还是栈上的 在Java中数组同样是一个对象所以对象在内存中如何存放同样适用于数组 所以数组的实例是保存在堆中而数组的引用是保存在栈上的。 Java中的对象创建有多少种方式 Java中有很多方式可以创建一个对象最简单的方式就是使用new关键字。 User user new User();除此以外还可以使用反射机制创建对象 User user User.class.newInstance();或者使用Constructor类的newInstance ConstructorUser constructor User.class.getConstructor(); User user constructor.newInstance();除此之外还可以使用clone方法和反序列化的方式这两种方式不常用并且代码比较复杂就不在这里展示了感兴趣的可以自行了解下。 Java中对象创建的过程是怎么样的 对于一个普通的Java对象的创建大致过程如下 1、虚拟机遇到new指令到常量池定位到这个类的符号引用。  2、检查符号引用代表的类是否被加载、解析、初始化过。  3、虚拟机为对象分配内存。  4、虚拟机将分配到的内存空间都初始化为零值。  5、虚拟机对对象进行必要的设置。  6、执行方法成员变量进行初始化。 Java中的对象一定在堆上分配内存吗 前面我们说过Java堆中主要保存了对象实例但是随着JIT编译期的发展与逃逸分析技术逐渐成熟栈上分配、标量替换优化技术将会导致一些微妙的变化所有的对象都分配到堆上也渐渐变得不那么“绝对”了。 其实在编译期间JIT会对代码做很多优化。其中有一部分优化的目的就是减少内存堆分配压力其中一种重要的技术叫做逃逸分析。 如果JIT经过逃逸分析发现有些对象没有逃逸出方法那么有可能堆内存分配会被优化成栈内存分配。 10、如何获取堆和栈的dump文件 Java DumpJava虚拟机的运行时快照。将Java虚拟机运行时的状态和信息保存到文件。 可以使用在服务器上使用jmap命令来获取堆dump使用jstack命令来获取线程的调用栈dump。 原文链接 本文为云栖社区原创内容未经允许不得转载。
http://www.zqtcl.cn/news/893471/

相关文章:

  • 网站建设属于什么税php网站建设全程实例
  • 做网站语言排名2018淄博市沂源县建设局网站
  • 腾冲网站建设哪个电商平台最好
  • 重点实验室网站建设宁波seo优化服务
  • 怎么用手机做刷会员网站网页设计指什么
  • 小企业网站建设多少钱网页设计图片剧中
  • 新乐做网站优化如何做二级域名子目录网站
  • 如何在网站上做推广中国在数码网站注册域名好 gt
  • 电子商务电商网站饿建设管理网站建设
  • php网站出现乱码网站建设项目总结
  • 网站建设公司墨子网络用我在线网站建设
  • 长寿网站建设公司服装设计有哪些网站
  • 苍溪规划和建设局网站网页设计制作报告
  • html5网站 源码360浏览器个别网页打不开怎么解决
  • 找个小网站建设网站优点
  • 台州网站建设优化网站建设加微信
  • 公司网站建设费会计分录义乌商城集团的网站建设
  • 彩票网站建设基本流程网站文章页做百度小程序
  • 在淘宝上做代销哪个网站好推广普通话喜迎二十大的手抄报怎么画
  • 知名网站建设开发受欢迎的唐山网站建设
  • 普洱网站搭建创建论坛网站需要多少钱
  • 自己做的网站如何在网络上展示wordpress 手动采集
  • 上海做网站要多少钱wordpress教程app
  • 房地产设计网站沈阳人流哪个医院好安全
  • 贵阳专业做网站微信小程序商城源代码
  • seo建站收费地震郑州做网站开发销售
  • 东莞整站优化推广公司找火速建设企业网站要多少钱
  • 网站备案 两个域名东莞保安公司联系电话
  • 网站专业制作公司律师如何在网上推广
  • 免费培训seo网站一直免费的服务器下载安装