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

哈尔滨网站设计哪家公司好网站建设 地址 上海石门二路

哈尔滨网站设计哪家公司好,网站建设 地址 上海石门二路,wordpress静态首页怎么编辑,手机app在哪里找JVM JVM是什么?JVM 的主要组成部分JVM工作流程JVM内存模型直接内存与堆内存的区别#xff1a;堆栈的区别Java会存在内存泄漏吗#xff1f;简述Java垃圾回收机制垃圾收集算法轻GC(Minor GC)和重GC(Full GC)新生代gc流程JVM优化与JVM调优 JVM是什么? JVM是Java Virtual Mach… JVM JVM是什么?JVM 的主要组成部分JVM工作流程JVM内存模型直接内存与堆内存的区别堆栈的区别Java会存在内存泄漏吗简述Java垃圾回收机制垃圾收集算法轻GC(Minor GC)和重GC(Full GC)新生代gc流程JVM优化与JVM调优 JVM是什么? JVM是Java Virtual MachineJava虚拟机的缩写。 虚拟机是一种抽象化的计算机通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机有自己完善的硬体架构如处理器、堆栈、寄存器等还具有相应的指令系统。Java虚拟机屏蔽了与具体操作系统平台相关的信息使得Java程序只需生成在Java虚拟机上运行的目标代码字节码就可以在多种平台上不加修改地运行。 简单来说JVM是用来解析和运行Java程序的。 JVM 的主要组成部分 JVM包含两个子系统和两个组件两个子系统为Class loader(类加载子系统)、Execution engine(执行引擎)两个组件为Runtime data area(运行时数据区)、Native Interface(本地接口)。 Class loader(类加载子系统)根据给定的全限定名类名(如java.lang.Object)来装载class文件到Runtime data area中的method area。Execution engine执行引擎执行classes中的指令。Native Interface(本地接口)与native libraries交互是其它编程语言交互的接口。Runtime data area(运行时数据区域)这就是我们常说的JVM的内存。 JVM工作流程 通过编译器把 Java 代码转换成字节码类加载器ClassLoader再把字节码加载到内存中将其放在运行时数据区Runtime data area的方法区内字节码文件只是 JVM 的一套指令集规范并不能直接交给底层操作系统去执行因此需要特定的命令解析器执行引擎Execution Engine将字节码翻译成底层系统指令 4.底层系统指令由 CPU 去执行而这个过程中需要调用其他语言的本地库接口Native Interface来实现整个程序的功能。 JVM内存模型 程序计数器Program Counter Register当前线程所执行的字节码的行号指示器字节码解析器的工作是通过改变这个计数器的值来选取下一条需要执行的字节码指令分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成Java 虚拟机栈Java Virtual Machine Stacks用于存储局部变量表基本类型是值、引用类型是句柄或者指针、操作数栈保存计算过程中的中间结果,同时作为计算过程中变量临时的存储空间、动态链接、方法出口等信息(8大基本类型 对象引用 实例方法)本地方法栈Native Method Stack与虚拟机栈的作用是一样的只不过虚拟机栈是服务 Java 方法的而本地方法栈是为虚拟机调用 Native 方法服务的Java 堆Java HeapJava 虚拟机中内存最大的一块是被所有线程共享的几乎所有的对象实例都在这里分配内存从内存回收角度来看java堆可分为新生代Young和老生代Old。新生代 ( Young ) 又被划分为三个区域Eden伊甸园区、From Survivor幸存区2、To Survivor幸存区1。方法区Methed Area用于存储已被虚拟机加载的类信息、常量池、静态变量(static)、方法信息(修饰符、方法名、返回值、参数等)、即时编译后的代码等数据。 直接内存与堆内存的区别 直接内存申请空间耗费很高的性能堆内存申请空间耗费比较低 直接内存的IO读写的性能要优于堆内存在多次读写操作的情况相差非常明显 堆栈的区别 堆因为是不连续的所以分配的内存是在运行期确认的因此大小不固定。一般堆大小远远大于栈。 栈是连续的所以分配的内存大小要在编译期就确认大小是固定的。 存放的内容不同 堆存放对象的实例和数组。因此该区更关注的是数据的存储 栈存放局部变量操作数栈返回结果。该区更关注的是程序方法的执行。 Java会存在内存泄漏吗 内存泄漏是指不再被使用的对象或者变量一直被占据在内存中。理论上来说Java是有GC垃圾回收机制的不再被使用的对象会被GC自动回收掉自动从内存中清除。 但是即使这样Java也还是存在着内存泄漏的情况java导致内存泄露的原因很明确长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄露尽管短生命周期对象已经不再需要但是因为长生命周期对象持有它的引用而导致不能被回收这就是java中内存泄露的发生场景。泄漏积少成多内存泄漏 会导致 内存溢出。 内存溢出OOM 是指 程序在申请内存时没有足够的内存空间供其使用出现内存溢出。 解决①设置JVM的堆参数 -XmxJVM最大内存 -Xms启动初始内存 -Xmn新生代大小 -Xss每个线程虚拟机栈及堆栈的大小 例如-Xms1024m -Xmx1024m -Xmn512m -Xss5m。 ​ ②分析内存看一下那个地方出现了问题(专业工具:Jprofiler,MAT)分析Dump内存文件 快速定位内存泄漏怎么查找dump文件直接找到文件的文件夹打开获得大的对象。 简述Java垃圾回收机制 垃圾回收机制简称GC。在java中程序员是不需要显示的去释放一个对象的内存的而是由虚拟机自行执行。在JVM中有一个垃圾回收线程它是低优先级的在正常情况下是不会执行的只有在虚拟机空闲或者当前堆内存不足时才会触发执行扫面那些没有被任何引用的对象并将它们添加到要回收的集合中进行回收。 Java中的垃圾回收是根据可达性分析算法和 引用计数算法来判断对象是否存活的。 System.gc(); // 手动回收垃圾 垃圾收集算法 标记清除算法首先标记所有需要回收的对象在标记完成后回收所有被标记的对象。 优点算法比较简单 缺点会产生大量不连续的内存碎片而且效率不高 复制算法 这种算法会将内存划分为两个相等的块每次只使用其中一块。当这块内存不够使用时就将还存活的对象复制到另一块内存中然后把这块内存一次清理掉。年轻区主要用复制算法幸存区复制一般都是from复制到to谁空谁是to适用与对象存活度较低。 优点效率比较高也避免了内存碎片。 缺点因为另一半内存一直是空的比较浪费空间。 标记-整理算法 标记-清除算法的升级版也叫标记-压缩算法。在完成标记阶段后不是直接对可回收对象进行清理而是让存活对象向着一端移动然后清理掉边界以外的内存。 优点避免了内存碎片和内存利用效率低。 缺点增加了一个移动的成本。 分代收集算法 年轻代存活率低-复制算法 老年代区域大存活率高-标记清除标记整理算法混合实现 轻GC(Minor GC)和重GC(Full GC) Minor GC当新对象去伊甸园区(Eden)申请内存失败的时候就会进行Minor GC对伊甸园区(Eden)回收非存活对象而没有被回收的对象会进入幸存区(Survivor)这种GC只发生在伊甸园区(Eden)不会影响到老年区。因为新对象分配内存大部分都在伊甸园区(Eden)所以伊甸园区(Eden)GC比较频繁。 注意在GC之后还存活的对象进入幸存区(Survivor)谁空谁是to可以交换位置当一个对象经历了15次GC可以配置次数-XX:MaxTenuringThreshold15还存活就进入老年区。 Full GC 清理整个堆因为Full GC需要对整个堆进行回收所以比Minor GC慢因为我们要尽可能的减少Full GC的次数。我们所说的JVM调优很大一部分就是对Full GC的优化。 会造成 Full GC: 老年区满了年轻区的对象转入或创建大对象才会满。方法区满了(jdk8及之后版本)系统中要加载的类过多。System.gc() 被显示调用通过Minor GC后进入老年代的平均大小大于老年代的可用内存第一次Minor GC之后有2MB的对象转入老年区然后在下一次Minor GC的时候就会判断老年区的空间是否有2MB如果没有就进行Full GC。 新生代gc流程 刚刚新建的对象在Eden中经历一次Minor GCEden中存活对象就会被移动到幸存区1Eden被清空。 等Eden区再满了触发Minor GCEden和幸存区1中存活的对象又会被复制到幸存区2中这个过程非常重要因为这种复制算法保证了幸存区2中来自幸存区1和Eden两部分的存活对象占用了连续的空间避免碎片化 幸存区1和Eden被清空然后下一轮幸存区1与幸存区2互换角色如此循环经历15次GC还存活对象放进入老年区 JVM优化与JVM调优 JVM优化JVM本身自带的编译时、运行时的优化机制各个jdk版本会有些不同不需要程序员干涉程序员学习了解即可 JVM调优JVM性能调优是程序员设置虚拟机参数不直接使用默认参数满足自己的需求是程序员的一项工作技能。 JVM性能调优的目标使用较小的内存占用来获得较高的吞吐量计算型或者较低的延迟交互型。 规则 我们要对Java堆分配策略进行优化合理规划Java堆容量、年轻代、老年代比例使自动内存分配和回收高效进行这里关注内存回收即GC操作。 第一条要求GC整个垃圾收集过程消耗的时间尽量小就必须要一个更小的堆 第二条要求GC整个垃圾收集过程次数尽量少必须保证一个更大的堆 注意第一条要求和第二条要求是互斥的不能同时满足我们要把握一个适度适中的原则一个相对大小的堆。 第三条要求老年代的空间比例尽量大一些这样Full GC的次数就会比较少周期比较长要平均相隔比较长的一段时间才有一个Full GC,即Full GC一定不要太频繁。 即第一条和第二条要求是一个大小适中的堆第三条要求这个堆中老年代的空间容量比例尽量高一些。 技巧 新生代中Eden:Survivor默认是8:1一般不改动JVM调优集中在新生代和老年代大小比例新生代和老年代默认比例是1:2。 JVM性能调优原则优先代码调优参数调优作为补充 在实际工作中我们可以直接将初始的堆大小与最大堆大小相等这样的好处是可以减少程序运行时垃圾回收次数从而提高效率。 初始堆值和最大堆内存内存越大吞吐量就越高但是也要根据自己电脑(服务器)的实际内存来比较。 最好使用并行收集器,因为并行收集器速度比串行吞吐量高速度快。当然服务器一定要是多线程的 减少GC对老年代的回收。设置生代带垃圾对象最大年龄进量不要有大量连续内存空间的java对象因为会直接到老年代内存不够就会执行GC 代码调优经验 避免创建过大的对象及数组过大的对象或数组在新生代没有足够空间容纳时会直接进入老年代如果是短命的大对象会提前出发Full GC。避免同时加载大量数据如一次从数据库中取出大量数据或者一次从Excel中读取大量记录可以分批读取用完尽快清空引用。对象引用及时置null当集合中有对象的引用这些对象使用完之后要尽快把集合中的引用清空这些无用对象尽快回收避免进入老年代。尽量避免长时间等待外部资源数据库、网络、设备资源等缩小对象的生命周期避免进入老年代如果不能及时返回结果可以适当采用异步处理的方式等
http://www.dnsts.com.cn/news/192906.html

相关文章:

  • 网站建设所需物资火狐浏览器下载
  • 怎么制定wordpress文章的页面申泽seo
  • 西安SEO网站建设哪家好浏览器直接进入网站的注意事项
  • 网站开发报价标准华为开发平台
  • 外国网站上做Task网站收录查询api
  • 黄石市城市建设档案馆网站足球比分网站建设
  • 唯品会网站建设全网营销老婆第一人黑料
  • 单页面的网站模板免费下载专业画册设计
  • 说一说网站建设的含义网站建设合同交印花税么
  • 阿里巴巴电子商务网站深圳南山区住房和建设局网站官网
  • erp网站建设自己做视频网站收益怎么来
  • wordpress标题图片代码wordpress手机版优化
  • 自己做的网站可以发布吗如何做适合手机访问的网站
  • 可信网站认证 代理商免费傻瓜室内装修设计软件
  • 常州免费网站制作公司网站建设 wordpress
  • 中国建设网站wordpress php推送示例
  • 1688网站如何运营乐陵森林
  • 网站建设进度表下载怎样辨别自己网站的好坏
  • 厦门做网站培训中国包装设计网
  • 网站开发html文件规范如何建设网站视频
  • wordpress+手机站目录wordpress generator
  • 一个网站能多个域名做不同站点景观设计公司有哪些
  • 专业的西安免费做网站合肥外贸网站建设公司
  • 黑龙江牡安建设有限公司网站网站建设管理制度九不准
  • 传奇网站免费空间古镇 网站建设
  • 杂志社网站模板开发公司安全生产管理制度
  • 天津网站建设方案杭州动漫设计公司最新招聘
  • 网站默认地区数据修改软件开发还是网站开发好
  • 网站建设公司费用电脑怎样做幻灯片的网站
  • 经典企业网站北京vi设计方案