名词解释:

三类参数:标准参数(可能不会变的,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. Invalid escape sequence(valid ones are \b \t \n \f \r \" \' \\)

    Invalid escape sequence(valid ones are \b \t \n \f \r \" \' \\) 在运行eclipse的相关程序代码时遇到了报错信息,查看控制台 ...

  2. poi excel导出,下载

    poi.jar包 public void downExcel(HttpServletResponse response,Page<ShopApply> page) throws Excep ...

  3. Windows Phone Foreground Toast

    Basically ToastPrompt is an UI component that derives from the Coding4Fun toolkit's abstract PopUp&l ...

  4. Watering Grass

    题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=85904#problem/E 题意: 给定一条草坪,草坪上有n个喷水装置.草坪长 ...

  5. 分馅饼 Pie

    Pie 链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=85904#problem/C 题目: Problem Description ...

  6. jquery插件之tab标签页或滑动门

    该插件乃本博客作者所写,目的在于提升作者的js能力,也给一些js菜鸟在使用插件时提供一些便利,老鸟就悠然地飞过吧. 此插件旨在实现目前较为流行的tab标签页或滑动门特效,在此插件中默认使用的是鼠标滑过 ...

  7. 百度ueditor代码高亮显示

    <script type="text/javascript" charset="utf-8" src="ueditor1_4_3-utf8-ph ...

  8. Week1 学长的经验教训

    我手头拿到的是上一届学长的软件工程大作业,作业的名称是——汽车4S店信息管理系统. 这个大作业我认为还是非常典型的传统模式的大作业,由手机端(客户端)和服务端组成,非常的传统.             ...

  9. poj1700

    这题的最坑的地方就是每步可能会有两种情况,这两情况起初我都单独考虑了,但就是没放在一起考虑...wa个不停,果然贪心是一个很考验思维的东西. 这里可以这样考虑,在运人的过程中,河的起始岸最后终将剩下一 ...

  10. HTML静态网页 css样式表

    CSS(Cascading Style Sheet,叠层样式表),作用是美化HTML网页. /*注释区域*/    此为注释语法 一.样式表 (一)样式表的分类 1.内联样式表 和HTML联合显示,控 ...