如何理解JAVA JVM,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。市面上是有很多虚拟机了解JVM的结构,通过合理的参数配置,有助于我们更好的发挥JVM的性能。内存空间的主要组成方法区方法区(Method Area),是各个线程共享的内存区域,它用于存储已被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等数据堆对于Java应用程序来说,Java堆(Java Heap)是虚拟机所管理的内存中最大的一块。Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,Java世界里“几乎”所有的对象实例都在这里分配内存虚拟机栈线程私有的,它的生命周期与线程相同。虚拟机栈描述的是Java方法执行的线程内存模型:每个方法被执行的时候,Java虚拟机都会同步创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态连接、方法出口等信息。每一个方法被调用直至执行完毕的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程本地方法栈本地方法栈(Native Method Stacks)与虚拟机栈所发挥的作用是非常相似的,其区别只是虚拟机栈为虚拟机执行Java方法(也就是字节码)服务,而本地方法栈则是为虚拟机使用到的本地(Native)方法服务程序计数器程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。可以理解为标记程序下一行执行什么。方法区,堆,线程共享虚拟机栈,本地方法栈,程序计数器,线程私有,创建一个线程时(可以理解为运行一个方法),创建一个栈帧,专门服务与此线程堆内存是我们主要使用的内存,堆内存组成如下包括,年轻代,老年代(默认比例是 1:2)年轻代:1.1 包含一个Eden,二个Survivor(默认比例 8:1:1),年轻代用于保存新创建的对象,如果年轻代的内存不够,会进行一次MinorGC,如果经历15次MinorGC(默认值),还存活的,会被转移到老年代(如果新对象年轻代,放不下,会被直接放到老年代)1.2 年轻代使用复制算法,把内存区域分为两块(Eden+Survivor,另一个Survivor),每次使用一块,GC的时候把一块中的内容移动到另一块中,原始内存中的对象就可以被回收了老年代:2.1 老年代内存不够时,会进行一次MajorGC(也有说法是FullGC)因为GC会造成”Stop the world”,线程暂停,所以要合理调整堆内存大小,并分配年轻代,老年代的比例,以达到减少GC频率,降低GC时间的目的在堆里面存放着Java世界中几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象之中哪些还“存活”着,哪些已经“死去”(“死去”即不可能再被任何途径使用的对象)了。一般采用“引用计数算法”来判定引用总结以上,内存调优的目的是,提高代码的执行效率,减少GC频率,降低GC时间,这就需要合理的分配堆内存(堆的总大小,年轻代的大小)下载 香港云主机安装工具 使用工具:JDK Mission Control 简称JMC下载安装参考 https://www.cnblogs.com/jhxxb/p/13279286.html本地程序可以直接在工具中看到,也可以远程连接到JVM,一般在服务器生成飞行数据,下载到本地,再用工具打开启动程序一般先设置JVM参数,运行程序(-Xms1024m -Xmx1024m -Xmn512m)Xms: 初始堆大小,默认无聊内存的1/64Xmx: 最大堆大小,默认物理内存的1/4Xmn: 新生代大小(新建对象,建议堆的25%-50%),默认整个堆的1/3收集程序的飞行数据jcmd
这篇文章将为大家详细讲解有关Windows中命令提示符被管理员停用怎么办,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可 香港云主机以有所收获。一、按组合键“win+r”唤出运行,在运行内输入“gpedit.msc”,点击确定。二、在弹出…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。