名词解释:

三类参数:标准参数(可能不会变的,java -help列出来的就是这类的),X参数(非标准化参数),XX参数(扩展参数)。

所有XX 参数都以-XX开始,但后面出现的+-就不同了。+代表激活参数,-代表消除参数。

NIO new input/output -- jdk1.4引入的新类。使用native函数直接分配内存。可以避免java堆和native堆间来回切换。

虚拟机栈:存储局部变量表,动态链接,方法出口。线程私有,生命周期与线程一样。

本地方法栈:类似虚拟机栈。不同在于虚拟机栈执行java服务,本地栈执行native服务。

请求的栈深度大于虚拟机允许的深度:stackoverflow错误

关于栈的深度:每次方法调用都会有一个栈帧压入虚拟机栈,操作系统给JVM分配的内存是有限的,JVM分配给“虚拟机栈”的内存是有限的。
如果方法调用过多,导致虚拟机栈满了就会溢出。
这里栈深度就是指栈帧的数量。

扩展时无法申请到足够的内存:outofmemoryerror

java堆:存储对象实例。GC系统的主要区域。堆内容不够。outofmemoryerror

方法区(nonheap):各线程共享,常量,静态变量,类信息等。方法区有个别名叫permanent Generation(永久代)。

分配对象内存方式:指针碰撞(内存整齐的情况下) 空闲列表(内存不整齐的情况)

    • 指针碰撞(Serial、ParNew等带Compact过程的收集器)
      假设Java堆中内存是绝对规整的,所有用过的内存都放在一边,空闲的内存放在另一边,中间放着一个指针作为分界点的指示器,那所分配内存就仅仅是把那个指针向空闲空间那边挪动一段与对象大小相等的距离,这种分配方式称为“指针碰撞”(Bump the Pointer)。

    • 空闲列表(CMS这种基于Mark-Sweep算法的收集器)
      如果Java堆中的内存并不是规整的,已使用的内存和空闲的内存相互交错,那就没有办法简单地进行指针碰撞了,虚拟机就必须维护一个列表,记录上哪些内存块是可用的,在分配的时候从列表中找到一块足够大的空间划分给对象实例,并更新列表上的记录,这种分配方式称为“空闲列表”(Free List)。

分配内存在并发情况下并不是线程安全的,有两种策略:1.CAS(乐观锁)配上失败重试。2.本地线程分配缓冲(TLAB)。预先将一小块内存分配给不同的线程,只有预分配内存不够时才采用同步锁机制。

内存溢出例子:

堆溢出:不断创建对象,在垃圾回收机制之前对象过多导致内存溢出。

    现象:outofmemory, java heap space。

解决方案:分清是内存泄漏(memory leak)还是内存溢出(memory over flow)。dump出的堆转储快照进行分析。确认内存中的对象是否是必要的。

栈溢出:使用-Xss减少栈内存容量;定义大量的本地变量。

现象:stackoverflow

  解决方案:使用虚拟机默认参数:在大多数情况下,达到1~2000的线程数并发是没有问题的。如果是多线程并发导致内存溢出的情况,在不能减少线程数或者升级内存的情况下,减少最大堆和减少栈容量也是一种方法。

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

本机直接内存溢出:- XX设置。

  现象:如果OOM之后Dump文件很小,可以考虑此原因。

判定对象是否存活:

  普遍算法:给对象添加计数器。有一个引用+1。引用失效-1.计数器为0对象失效。

    无法解决的问题:a.instance = b; b.instance = a;无其他引用,但计数器永远不会为0。

  eclipse开启gc打印日志:

  -verbose:gc (开启打印垃圾回收日志) 
  -Xloggc:eclipse_gc.log (设置垃圾回收日志打印的文件,文件名称可以自定义) 
  -XX:+PrintGCTimeStamps (打印垃圾回收时间信息时的时间格式) 
  -XX:+PrintGCDetails (打印垃圾回收详情)

  可达性分析算法:通过一系列称为GC Root的对象作为起始点。当一个GC对象没有任何引用链相连,就是说GC Root对象不可达,则证明此对象不可用。

  java语言中:GC Roots包括虚拟机栈引用的对象,方法区中类静态属性引用的对象,方法区常量引用的对象,本地方法栈中native引用的对象。

minor gc 和full gc

新生代gc:发生在新生代的gc动作。频繁。采用复制算法复制内存。

老生代gc:老生代的gc动作。不频繁,回收速度较慢。大对象直接进入老年代。典型的例子为:长字符串或者数组。jvm为了安置它们需要提前gc。

jvm基础笔记的更多相关文章

  1. java 笔记(1)-—— JVM基础,内存数据,内存释放,垃圾回收,即时编译技术JIT,高精度类型

    1.java中5个存放数据的地方: (1).寄存器(Registers):位于CPU内部,是速度最快的存储区,但是数量和容量有限.在java中不能直接操作寄存器. (2).栈(Stack):栈位于通用 ...

  2. java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)

    java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessCo ...

  3. java之jvm学习笔记二(类装载器的体系结构)

    java的class只在需要的时候才内转载入内存,并由java虚拟机的执行引擎来执行,而执行引擎从总的来说主要的执行方式分为四种, 第一种,一次性解释代码,也就是当字节码转载到内存后,每次需要都会重新 ...

  4. java之jvm学习笔记十三(jvm基本结构)

    java之jvm学习笔记十三(jvm基本结构) 这一节,主要来学习jvm的基本结构,也就是概述.说是概述,内容很多,而且概念量也很大,不过关于概念方面,你不用担心,我完全有信心,让概念在你的脑子里变成 ...

  5. jvm内存JVM学习笔记-引用(Reference)机制

    在写这篇文章之前,xxx已经写过了几篇关于改jvm内存主题的文章,想要了解的朋友可以去翻一下之前的文章 如果你还不了解JVM的基本概念和内存划分,请阅读JVM学习笔记-基础知识和JVM学习笔记-内存处 ...

  6. JVM基础系列第2讲:Java 虚拟机的历史

    说起 Java 虚拟机,许多人就会将其与 HotSpot 虚拟机等同看待.但实际上 Java 虚拟机除了 HotSpot 之外,还有 Sun Classic VM.Exact VM.BEA JRock ...

  7. C#面试题(转载) SQL Server 数据库基础笔记分享(下) SQL Server 数据库基础笔记分享(上) Asp.Net MVC4中的全局过滤器 C#语法——泛型的多种应用

    C#面试题(转载) 原文地址:100道C#面试题(.net开发人员必备)  https://blog.csdn.net/u013519551/article/details/51220841 1. . ...

  8. JVM学习笔记——字节码指令

    JVM学习笔记——字节码指令 字节码 0与 1是计算机仅能识别的信号,经过0和1的不同组合产生了数字之上的操作.另外,通过不同的组合亦产生了各种字符.同样,可以通过不同的组合产生不同的机器指令.在不同 ...

  9. JVM学习笔记-第七章-虚拟机类加载机制

    JVM学习笔记-第七章-虚拟机类加载机制 7.1 概述 Java虚拟机描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被 ...

随机推荐

  1. python mysql 单引号字符串过滤

    最主要用这个函数,可以处理MySQLdb.escape_string(content). class Guide: def __init__(self): self.time_zone = 7*360 ...

  2. 部署node程序并维持正常运行时间

    12.2部署的基础知识 假定你创建了一个想要展示的Web程序,或者创建了一个商业应用,在把它放到生产环境中之前需要测试一下.你很可能会从一个简单的部署开始,然后再做些工作让它的正常运行时间和性能达到最 ...

  3. js判断图片加载完成后获取图片实际宽高

    通常,我们会用jq的.width()/.height()方法获取图片的宽度/高度或者用js的.offsetwidth/.offsetheight方法来获取图片的宽度/高度,但这些方法在我们通过样式设置 ...

  4. [LintCode] Reverse Pairs 翻转对

    For an array A, if i < j, and A [i] > A [j], called (A [i], A [j]) is a reverse pair.return to ...

  5. Odoo 9 PDF不显示中文字体

    在Ubuntu中安装中文字体:    $ sudo apt-get install ttf-wqy-zenhei    $ sudo apt-get install ttf-wqy-microhei

  6. hao123列表的实现

    <!DOCTYPE html><html><head>        <meta http-equiv="Content-Type" co ...

  7. Js文字特效—文字段逐个变色循环

    自己用来练习的,附上详细注释,如果有和我一样喜欢并想要学习Dom特效创作的朋友,推荐先系统了解Javascript中Html Dom Object部分的内容,包括常用方法及属性. <!DOCTY ...

  8. html5学习小结,float练习。

    经过两天的H5学习之后,做了一下float属性的练习,要做出来的效果为: 下面为代码部分,所用到的知识不多,不过才现在刚开始,以后要学的东西还有很多,大家继续加油! <!DOCTYPE html ...

  9. c# 集合及特殊集合

    1.ArrayList集合 习题:输入人数,输入分数,存到集合里面,之后再读取出来,求平均分,排序打印. 2.Stack 集合 3.Queue    队列集合 每日一语:脚跟立定以后,你必须拿你的力量 ...

  10. sqlmap用户手册详解(转)

    http://url/sqlmap/mysql/get_int.php?id=1 当给sqlmap这么一个url的时候,它会: 1.判断可注入的参数 2.判断可以用那种SQL注入技术来注入 3.识别出 ...