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

网站建设网站维护的具体内容是什么国外游戏ui设计网站

网站建设网站维护的具体内容是什么,国外游戏ui设计网站,商会网站建设,建筑 企业官网设计JVM原理 #xff08;1#xff09;jvm是java的核心和基础#xff0c;在java编译器和os平台之间的虚拟处理器#xff0c;可在上面执行字节码程序。 #xff08;2#xff09;java编译器只要面向jvm#xff0c;生成jvm能理解的字节码文件。java源文件经编译成字节码程序1jvm是java的核心和基础在java编译器和os平台之间的虚拟处理器可在上面执行字节码程序。 2java编译器只要面向jvm生成jvm能理解的字节码文件。java源文件经编译成字节码程序通过jvm将每条指令翻译成不同的机器码通过特定平台运行。 JVM执行程序的过程 加载.class文件管理并分配内存执行垃圾收集 JREjava运行时环境由JVM构造的java程序的运行环也是Java程序运行的环境但是他同时一个操作系统的一个应用程序一个进程因此他也有他自己的运行的生命周期也有自己的代码和数据空间。 JVM在整个jdk中处于最底层负责于操作系统的交互用来屏蔽操作系统环境提供一个完整的Java运行环境因此也就虚拟计算机。 JVM的生命周期 JVM实例对应了一个独立运行的java程序它是进程级别 1) 启动。启动一个Java程序时一个JVM实例就产生了任何一个拥有public static void main(String[] args)函数的class都可以作为JVM实例运行的起点 2) 运行。main()作为该程序初始线程的起点任何其他线程均由该线程启动。JVM内部有两种线程守护线程和非守护线程main()属于非守护线程守护线程通常由JVM自己使用java程序也可以表明自己创建的线程是守护线程 3) 消亡。当程序中的所有非守护线程都终止时JVM才退出若安全管理器允许程序也可以使用Runtime类或者System.exit()来退出 JVM执行引擎实例则对应了属于用户运行程序的线程它是线程级别的 JVM运行时数据区 方法区Method Area 方法区是所有线程共享的内存区域它用于存储已被Java虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。 它有个别命叫Non-Heap非堆。当方法区无法满足内存分配需求时抛出OutOfMemoryError异常。 Java堆Java Heap java堆是java虚拟机所管理的内存中最大的一块是被所有线程共享的一块内存区域在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例。 在Java虚拟机规范中的描述是所有的对象实例以及数组都要在堆上分配。 java堆是垃圾收集器管理的主要区域因此也被成为“GC堆”。 从内存回收角度来看java堆可分为新生代和老生代。 从内存分配的角度看线程共享的Java堆中可能划分出多个线程私有的分配缓冲区。 无论怎么划分都与存放内容无关无论哪个区域存储的都是对象实例进一步的划分都是为了更好的回收内存或者更快的分配内存。 根据Java虚拟机规范的规定java堆可以处于物理上不连续的内存空间中。当前主流的虚拟机都是可扩展的通过 -Xmx 和 -Xms 控制。如果堆中没有内存可以完成实例分配并且堆也无法再扩展时将会抛出OutOfMemoryError异常。 程序计数器Program Counter Register 程序计数器是一块较小的内存空间它可以看作是保存当前线程所正在执行的字节码指令的地址(行号)也可以把它叫做线程计数器。 由于Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的一个处理器都只会执行一条线程中的指令。因此为了线程切换后能恢复到正确的执行位置每条线程都有一个独立的程序计数器各个线程之间计数器互不影响独立存储。称之为“线程私有”的内存。程序计数器内存区域是虚拟机中唯一没有规定OutOfMemoryError情况的区域。 Java虚拟机栈Java Virtual Machine Stacks java虚拟机是线程私有的它的生命周期和线程相同。 虚拟机栈描述的是Java方法执行的内存模型每个方法在执行的同时都会创建一个栈帧Stack Frame用于存储局部变量表、操作数栈、动态链接、方法出口等信息。 虚拟机栈中是有单位的单位就是栈帧一个方法一个栈帧。一个栈帧中他又要存储局部变量操作数栈动态链接出口等。 本地方法栈Native Method Stack 本地方法栈很好理解他很栈很像只不过方法上带了 native 关键字的栈字 它是虚拟机栈为虚拟机执行Java方法也就是字节码的服务 native关键字的方法是看不到的必须要去oracle官网去下载才可以看的到而且native关键字修饰的大部分源码都是C和C的代码。 同理可得本地方法栈中就是C和C的代码 Java内存结构 直接内存Direct Memory 直接内存不是虚拟机运行时数据区的一部分也不是java虚拟机规范中定义的内存区域。但是既然是内存肯定还是受本机总内存包括RAM以及SWAP区或者分页文件大小以及处理器寻址空间的限制。 在JDK1.4 中新加入了NIO(New Input/Output)类引入了一种基于通道(Channel)与缓冲区Buffer的I/O 方式它可以使用native 函数库直接分配堆外内存然后通脱一个存储在Java堆中的DirectByteBuffer 对象作为这块内存的引用进行操作。这样能在一些场景中显著提高性能因为避免了在Java堆和Native本地堆中来回复制数据。 直接内存与堆内存的区别 直接内存申请空间耗费很高的性能堆内存申请空间耗费比较低 直接内存的IO读写的性能要优于堆内存在多次读写操作的情况相差非常明显 JVM字节码执行引擎 虚拟机核心的组件就是执行引擎它负责执行虚拟机的字节码一般户先进行编译成机器码后执行。 “虚拟机”是一个相对于“物理机”的概念虚拟机的字节码是不能直接在物理机上运行的需要JVM字节码执行引擎编译成机器码后才可在物理机上执行。 垃圾收集系统 程序在运行过程中会产生大量的内存垃圾一些没有引用指向的内存对象都属于内存垃圾因为这些对象已经无法访问程序用不了它们了对程序而言它们已经死亡为了确保程序运行时的性能java虚拟机在程序运行的过程中不断地进行自动的垃圾回收GC。 垃圾收集系统是Java的核心也是不可少的Java有一套自己进行垃圾清理的机制开发人员无需手工清理。 JVM的垃圾回收机制 垃圾回收机制简称GC GC主要用于Java堆的管理。Java 中的堆是 JVM 所管理的最大的一块内存空间主要用于存放各种类的实例对象。 什么是垃圾回收机制 程序在运行过程中会产生大量的内存垃圾一些没有引用指向的内存对象都属于内存垃圾因为这些对象已经无法访问程序用不了它们了对程序而言它们已经死亡为了确保程序运行时的性能java虚拟机在程序运行的过程中不断地进行自动的垃圾回收GC。 GC是不定时去堆内存中清理不可达对象。不可达的对象并不会马上就会直接回收 垃圾收集器在一个Java程序中的执行是自动的不能强制执行清楚那个对象即使程序员能明确地判断出有一块内存已经无用了是应该回收的程序员也不能强制垃圾收集器回收该内存块。程序员唯一能做的就是通过调用System.gc 方法来建议执行垃圾收集器但是他是否执行什么时候执行却都是不可知的。这也是垃圾收集器的最主要的缺点。当然相对于它给程序员带来的巨大方便性而言这个缺点是瑕不掩瑜的。 手动执行GC System.gc(); // 手动回收垃圾 finalize方法作用 finalize()方法是在每次执行GC操作之前时会调用的方法可以用它做必要的清理工作。 它是在Object类中定义的因此所有的类都继承了它。子类覆盖finalize()方法以整理系统资源或者执行其他清理工作。finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。 public class Test {public static void main(String[] args) {Test test new Test();test null;System.gc(); // 手动回收垃圾}Overrideprotected void finalize() throws Throwable {// gc回收垃圾之前调用System.out.println(gc回收垃圾之前调用的方法);} }新生代、老年代、永久代(方法区)的区别 Java 中的堆是 JVM 所管理的最大的一块内存空间主要用于存放各种类的实例对象。 在 Java 中堆被划分成两个不同的区域新生代 ( Young )、老年代 ( Old )。 老年代就一个区域。新生代 ( Young ) 又被划分为三个区域Eden、From Survivor、To Survivor。 这样划分的目的是为了使 JVM 能够更好的管理堆内存中的对象包括内存的分配以及回收。 默认的新生代 ( Young ) 与老年代 ( Old ) 的比例的值为 1:2 ( 该值可以通过参数 –XX:NewRatio 来指定 )即新生代 ( Young ) 1/3 的堆空间大小。老年代 ( Old ) 2/3 的堆空间大小。 其中新生代 ( Young ) 被细分为 Eden 和 两个 Survivor 区域这两个 Survivor 区域分别被命名为 From Survivor 和 ToSurvivor 以示区分。 默认的Edem From Survivor To Survivor 8 : 1 : 1 ( 可以通过参数 –XX:SurvivorRatio 来设定 )即 Eden 8/10 的新生代空间大小From Survivor To Survivor 1/10 的新生代空间大小。 JVM 每次只会使用 Eden 和其中的一块 Survivor 区域来为对象服务所以无论什么时候总是有一块 Survivor 区域是空闲着的。 因此新生代实际可用的内存空间为 9/10 ( 即90% )的新生代空间。 永久代就是JVM的方法区。在这里都是放着一些被虚拟机加载的类信息静态变量常量等数据。这个区中的东西比老年代和新生代更不容易回收。 Minor GC、Major GC、Full GC区别及触发条件 Minor GC是新生代GC指的是发生在新生代的垃圾收集动作。由于java对象大都是朝生夕死的所以Minor GC非常频繁一般回收速度也比较快。 Major GC是老年代GC指的是发生在老年代的GC通常执行Major GC会连着Minor GC一起执行。Major GC的速度要比Minor GC慢的多。 Full GC是清理整个堆空间包括年轻代和老年代 Minor GC 触发条件一般为 eden区满时触发MinorGC。即申请一个对象时发现eden区不够用则触发一次MinorGC。新创建的对象大小 Eden所剩空间 Major GC和Full GC 触发条件一般为 Major GC通常是跟full GC是等价的 每次晋升到老年代的对象平均大小老年代剩余空间MinorGC后存活的对象超过了老年代剩余空间永久代空间不足执行System.gc()CMS GC异常堆内存分配很大的对象 垃圾收集器 垃圾收集器是垃圾回收算法引用计数法、标记清楚法、标记整理法、复制算法的具体实现不同垃圾收集器、不同版本的JVM所提供的垃圾收集器可能会有很在差别。 新生代收集器Serial、ParNew、Parallel Scavenge老年代收集器CMS、Serial Old、Parallel Old整堆收集器G1 垃圾回收器详解 垃圾回收器工作区域回收算法工作线程用户线程并行描述Serial新生带复制算法单线程否Client模式下默认新生代收集器。简单高效ParNew新生带复制算法多线程否Serial的多线程版本Server模式下首选 可搭配CMS的新生代收集器Parallel Scavenge新生带复制算法多线程否目标是达到可控制的吞吐量Serial Old老年带标记-整理单线程否Serial老年代版本给Client模式下的虚拟机使用Parallel Old老年带标记-整理多线程否Parallel Scavenge老年代版本吞吐量优先CMS老年带标记-清楚多线程是追求最短回收停顿时间G1新生带 老年带标记-整理 复制算法多线程是JDK1.9默认垃圾收集器JVM参数配置 -Xms初始堆大小JVM 启动的时候给定堆空间大小。 -Xmx最大堆大小JVM 运行过程中如果初始堆空间不足的时候最大可以扩展到多少。 -Xmn设置堆中年轻代大小。整个堆大小年轻代大小年老代大小持久代大小。 -XX:NewSizen 设置年轻代初始化大小大小 -XX:MaxNewSizen 设置年轻代最大值-XX:NewRation 设置年轻代和年老代的比值。如: -XX:NewRatio3表示年轻代与年老代比值为 13年轻代占整个年轻代年老代和的 1/4 -XX:SurvivorRation 年轻代中 Eden 区与两个 Survivor 区的比值。注意 Survivor 区有两个。8表示两个Survivor :eden2:8 ,即一个Survivor占年轻代的1/10默认就为8-Xss设置每个线程的堆栈大小。JDK5后每个线程 Java 栈大小为 1M以前每个线程堆栈大小为 256K。-XX:ThreadStackSizen 线程堆栈大小-XX:PermSizen 设置持久代初始值 -XX:MaxPermSizen 设置持久代大小-XX:MaxTenuringThresholdn 设置年轻带垃圾对象最大年龄。如果设置为 0 的话则年轻代对象不经过 Survivor 区直接进入年老代。-XX:LargePageSizeInBytesn 设置堆内存的内存页大小-XX:UseFastAccessorMethods 优化原始类型的getter方法性能-XX:DisableExplicitGC 禁止在运行期显式地调用System.gc()默认启用 -XX:AggressiveOpts 是否启用JVM开发团队最新的调优成果。例如编译优化偏向锁并行年老代收集等jdk6纸之后默认启动-XX:UseBiasedLocking 是否启用偏向锁JDK6默认启用 -Xnoclassgc 是否禁用垃圾回收-XX:UseThreadPriorities 使用本地线程的优先级默认启用 JVM的GC垃圾收集器设置 -XX:UseSerialGC:设置串行收集器年轻带收集器 -XX:UseParNewGC:设置年轻代为并行收集。可与 CMS 收集同时使用。JDK5.0 以上JVM 会根据系统配置自行设置所以无需再设置此值。-XX:UseParallelGC:设置并行收集器目标是目标是达到可控制的吞吐量-XX:UseParallelOldGC:设置并行年老代收集器JDK6.0 支持对年老代并行收集。 -XX:UseConcMarkSweepGC:设置年老代并发收集器-XX:UseG1GC:设置 G1 收集器JDK1.9默认垃圾收集器 示例 假设服务器内存8G运行8个微服务给每个微服务分配800M内存 设置JVM java -Xmx800m -Xms800m -Xmn300m -Xss1024k -Xmx800m 设置JVM最大内存为800M -Xms800m 设置JVM最小内存为800M(与最大值保持一致可以防止每次垃圾回收(GC)后JVM对内存进行再分配) -Xmn300m 设置新生代大小新生代大小会影响到老年代的大小Sun推荐设置为总内存的3/8 -Xss1024k 每个线程堆栈大小值越小能生成的线程数越多但是一般不超过5000个在递归场景下值太小可能会造成堆栈溢出
http://www.w-s-a.com/news/169909/

相关文章:

  • 免费手机网站申请上海网站建设设计公司哪家好
  • 站长工具大全企业网上书店网站建设设计
  • 做网站的专业公司公司网站是做的谷歌的
  • 做网站前期工作wordpress图片并排
  • 免费注册网站哪个好wordpress评论修改
  • 合肥模板网站建设软件赤峰公司网站建设
  • 毕业设计都是做网站吗深圳网站制作企业邮箱
  • 网站排名 优帮云小规模公司简介怎么写
  • 那个做头像的网站好选择手机网站建设
  • 设计一个网站花多少时间做视频网站适合用什么服务器
  • asp网站开发环境订单系统单页面网站怎么做
  • 山东网站建设都有那些企业推广策略
  • 网站开发文档是什么概念衣服销售网站建设规划书范文
  • 中国建筑装饰网官网企业网站设计优化公司
  • 南海建设工程交易中心网站c2c交易平台有哪些?
  • 有没有专业做网站架构图的软件番禺建设网站哪个好
  • 建立网站第一步整站seo优化公司
  • php网站开发文章管理系统wordpress 评论 顶踩 心 插件
  • 网站做百度收录的意义html网页设计代码作业代码
  • 网站推广怎么做 知乎衡水做网站开发的
  • 重庆忠县网站建设报价网页构建
  • 怎么自己做单页网站怎么在阿里做网站
  • 公司网站重新备案做电商没几个能赚钱的
  • 网站开发我们都能解决怎样做网站吸引客户
  • 网站首页图片切换代码wordpress minfy
  • 什么程序做网站收录好企业搭建网站的必要性
  • 建设网站主题建站必须要域名吗
  • 网站建设海报设计购物平台网站建设框架
  • 湖北在线网站建设建一个网站迈年
  • 上班自己花钱做的网站网站首页的动态怎么做