关于JVM高级特性的总结

1.在JVM中有一块很重要的内容-------内存管理

内存管理中又有--------运行时数据区域

方法区(method area)             ||                   虚拟机栈(VM  stack)                                      本地方法栈 (native method stack)

||

堆(heap)                                ||                   程序计数器(program  counter register):程序一行一行的执行,就归功于这一部分(你可理解为程序   行数)

                 ||

2.java虚拟机栈:每个方法在被调用时就会创建一个栈帧,每一个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中到出栈的过程(-Xss)

3.java堆:是java虚拟机所管理的内存中最大的一块。java堆是被所有线程共享的一块内存区域,几乎所有的对象实例都在这里分配内存。(注意这里的修饰词是几乎,那么什么对象实例不在这里分配呢??? class类)是垃圾收集器(GC)管理的主要区域(-Xms;-Xmx;-Xmn)

4.方法区:存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据,运行时常量池(runtime constant pool)是方法区的一部分。(-XX:permSize)

5.直接内存:并不是虚拟机运行时数据区的一部分,也不是java虚拟机规范中定义的内存区域。

-------------------------说了那么多  ,看了那么多 ,上干货-------------------------

来点内存溢出看看

1. java堆溢出

2.方法区和运行时常量池溢出

3.虚拟机栈和本地方法栈溢出

4.本机直接内存溢出

垃圾收集器与内存分配策略

1.GC要做的事?

1.where/which ?       2. when?  3. how?

  在运行时数据区域中  谁需要GC?

  很显然根据栈的原理  对于类加载都是先进入后出  换言之类操作完成后自动清理,从内存中释放掉了。因此不需要GC

  而堆和方法区是需要的

 2.那在程序中如何判断对象是否存活?也就是判断哪学是需要GC区处理的

   1.引用计数算法

      就是对象每次被引用都+1 如果是0那就表示没有被引用可清理。

      但是这种方法存在缺陷,如果两个对象互相引用,会陷入死循环。      

   2.可达性分析    

      GC roots  

          | 

         obj1                         obj4

           |                             |

        ---------                     -------

        |         |                  |       |

      obj2        obj3              obj5      obj6

根节点roots到达不了obj4  应该判定为obj4及其子节点为可回首对象

 3.标记--清除算法 

   缺点:碎片化

 4.复制算法

   缺点:内存最大使用率只有百分之五十,浪费空间

 5.标记--整理算法

   缺点:速度慢

实际开发将这三种清除算法结合使用  

 6.新生代  --- 老年代

   新生代适合用--复制算法

   老年代---标记清除和标记整理算法

原文地址:https://www.cnblogs.com/woniufei/p/9396167.html

时间: 2024-08-29 03:38:38

关于JVM高级特性的总结的相关文章

《深入理解Java虚拟机 JVM高级特性...》核心笔记

深入理解Java虚拟机 JVM高级特性与最佳实践(第二版) 核心笔记 JAVA 环境: JAVA虚拟机高级特性: 一:java内存区域与内存异常 一):运行数据区     1:程序计数器(Program Counter Register),也称"PC寄存器" A:用来指示需要执行哪条指令的.(在汇编语言中,CPU在得到指令之后,程序计数器便自动加1或者根据                    转移指针得到下一条指令的地址,如此循环,直至执行完所有的指令.) B:由于在JVM中,多线程

JVM高级特性与实践(二):对象存活判定算法(引用) 与 回收

关于垃圾回收器GC(Garbage Collection),多数人意味它是Java语言的伴生产物.事实上,GC的历史远比Java悠远,于1960年诞生在MIT的Lisp是第一门真正使用内存动态分配和垃圾收集技术的语言.当Lisp尚在胚胎时期,开发人员就在思考GC需要完成的3件事情: 哪些内存需要回收? 什么时候回收? 如何回收? 目前GC早已解决了以上问题,内存的动态分配与内存回收机制已经相当成熟,一切似乎“自动化”起来.而开发人员仍旧需要了解GC和内存分配等底层知识,因为在排查各种内存溢出.内

深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)PDF下载

网盘下载地址:深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)PDF下载 – 易分享电子书PDF资源网 作者: 周志明 出版社: 机械工业出版社 副标题: JVM高级特性与最佳实践 出版年: 2013-9-1 页数: 433 定价: 79.00元 装帧: 平装 内容简介 · · · · · · <深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)>内容简介:第1版两年内印刷近10次,4家网上书店的评论近4?000条,98%以上的评论全部为5星级的好评,是整个Java图书领域公

深入java虚拟机-jvm高级特性和实战

第一部分 走近java 第一章 java技术体系 官方所定义的java技术体系 java程序设计语言 各硬件平台上的java虚拟机 Class文件格式 java api类库 来自商业机构和开源社区的第三方java类库 我们可以把java程序设计语言.java虚拟机.java api类库这三部分统称为JDK,是用于支持java程序开发的 最小环境把java api类库总的javaSE api子集和java虚拟机统称为JRE,是支持java程序运行的标准环境. 第二部分 自动内存管理机制 第二章 内

JVM高级特性与实践(一):Java内存区域 与 内存溢出异常

对于从事C.C++的开发人员而言,在内存管理领域,他们具有绝对的“权利”——拥有每个对象的控制权,并担负着每个对象生命周期的维护责任.而对于Java开发人员而言,在虚拟机自动内存管理机制的帮助下,无需为每一个创建new操作去配对 delete/free 代码,减少内存泄漏和内存溢出的问题,这些都交给了Java虚拟机去进行内存控制,但是正因如此,当出现相关问题时,若不了解JVM使用内存规则,就难以排查错误.接下来以此篇文章记录学习Java虚拟机内存各个区域概念.作用.服务对象以及可能产生的问题.

JVM高级特性-二、JVM在堆中对象的分配、布局、访问过程

前面介绍了jvm运行时数据区域后,下面讲解下对内存中数据的其他细节,看他们是如何创建.布局及访问的 一.对象的创建 对象的创建分配方式主要有两种:指针碰撞和空闲列表 指针碰撞: 假设堆内存中是绝对规整的,那么,在为新对象分配内存空间时,只需要将指针向空闲空间方向移动新对象所需大小的一段出来即可 空闲列表: 如果内存不是规整的,这时就需要维护一个列表,记录哪些内存是空闲的,在分配空间时,从列表中找出一块足够大的空间划分为对象实例并更新列表记录

《深入理解Java虚拟机:JVM高级特性与最佳实践》学习笔记 Ⅲ 虚拟机执行子系统

第三部分 虚拟机执行子系统第6章 类文件结构//实现语言无关性的基础仍然是虚拟机和字节码存储格式,使用Java编译器可以把Java代码编译为存储字节码的Class文件,使用JRuby等其他语言的编译器一样可以把程序代码编译成Class文件,虚拟机并不关心Class的来源是什么语言,只要它符合Class文件应有的结构就可以在Java虚拟机中运行.1.Class类文件的结构Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑的排列在Class文件之中,中间没有分隔符.Cl

性能优化之 JVM 高级特性

1.JVM体系结构 线程共享内存 可以被所有线程共享的区域,包括堆区.方法区.运行时常量池. 1.1 堆(Heap) 大多数时候,Java 堆是 Java 虚拟机管理的内存里最大的一块,所有的对象实例和数组都要在堆上分配内存空间,Java 对象可以分为两类,一类是快速创建快速消亡的,另一类是长期使用的.所以针对这种情况大多收集器都是基于分代收集算法进行回收. Java 的堆可以分为新生代(Young Generation)和老年代(Old Generation),而新生代(Young Gener

挑战高薪必看:《深入理解java虚拟机 jvm高级特性与最佳实践》

Java是目前用户最多.使用范围最广的软件开发技术之一.Java 的技术体系主要由支撑 Java程序运行的虚拟机.提供各开发领域接口支持的Java API.Java 编程语言及许多第三方 Java框架(如Spring.Struts 等)构成.在国内,有关Java API.Java语言语法及第三方框 架的技术资料和书籍非常丰富,相比之下,有关Java虚拟机的资料却显得异常贫乏. 资料获取方法 内容特色 第一部分走近 Java 本书的第部分为后文的讲解建立了良好的基础.尽管了解Java技术的来龙去脉