jvm,作为java平台通用性的实现基础,重要性不言而喻。

1.开发新项目,写运行脚本时要运用相关知识,确定jvm参数

2.维护老项目,需要对jvm进行性能调优

jvm内存划分:

1.程序计数器

2.虚拟机栈,局部变量,操作数等。当方法需要的栈深度超过规定的最大深度,会报stackFlowOver异常

3.堆,对象分配

4.本地方法栈,native方法使用

5.方法区(包括运行常量池),常量,静态变量以及类的相关信息,Class对象(比较特殊)也在这里

6.直接内存,比如nio就会使用直接内存,减少了java堆和native堆之间来回复制数据

各区内存不足时会报出outOfMemory异常

垃圾收集策略

1.如何判断对象已死:

  • 引用计数器。缺点:循环引用,可能会现判断失误
  • 根引用是否可达。根引用的定义:虚拟机栈中的引用,方法区的常量引用和静态变量引用,native方法的引用

2.强 软 弱 虚引用的相关介绍见另一篇博文

垃圾回收算法

1.标记清除,cms收集器(用于老年代的垃圾回收)使用该算法。缺点在于容易产生碎片。

2.标记整理。缺点:开销大。

3.复制。缺点:因为要单独开辟区域用作复制,因此内存使用率下降。串行,并行收集器都使用该算法

4.分代,将堆内存分为新生代和老年代。不同代采用不同的垃圾回收算法。

垃圾收集器

1.串行收集器,单线程收集

2.并行收集器,多线程收集

3.并发收集器,垃圾回收与应用并行。

垃圾收集器有三大工作目标:

1.最大暂停时间目标,应用暂停期间,应用是无响应的,对高并发的web应用来说,应该尽可能减少暂停时间。—XX:MaxGCPauseMillis=<nnn> 可以指定最大暂停nnn毫秒。

2.吞吐量:吞吐量是应用垃圾收集以外的时间除以垃圾收集时间 -XX:GCTimeRatio=<nnn> 可以指定该比例

3.占用空间目标:当前两个目标达成后,垃圾收集器开始减少堆的大小

优化策略:

server模式的虚拟机,默认最大堆是内存的四分至一,最大不超过1G,如果需要更大堆,要明确指定

最大暂停时间和吞吐量两个目标是矛盾的,减小堆的大小,垃圾回收越频繁,每次暂停时间越短,总的垃圾收集时间会变大,吞吐量就会变小。

增大堆的大小,垃圾回收频率降低,总的垃圾回收时间变小,吞吐量变大,但是每次暂停时间会变大。

内存分代:

新生代:新生代又包括eden和两个survivor,新生代满了引发minor GC,minor GC当中,足够老的进入老年代(存活了若干代)

老年代:老年代满了之后,引发major GC,新生代和老年代都回收

—XX:+PrintGCDetails

-XX:+PrintGCTimeStamps

指定堆大小的参数 —Xmxn最大堆,—Xmsn最小堆

串行收集器可以通过—XX:MaxFreeHeapRatio=和—XX:MaxFreeHeapRatio=可以指定堆的可用空间大小,当可用空间小于min值时,扩大堆,大于max时,缩小堆。

新生代:—XX:NewRatio= 老年代除以新生代  —XX:NewSize= 和—XX:MaxNewSize=指定新生代初始和最大

—XX:SurvivorRatio=指定eden与单个survivor的比例

多处理器要分配足够大的新生代,因为分配内存是并行的

垃圾收集器的选择:

串行:单处理器,小内存应用,:—XX:+UseSerialGC

并行:多处理器,—XX:+UseParalleGC,可以通过设置 —XX:+UseParalleOldGC,major GC时并行,minor GC串行,使用并行收集器,吞吐量大

并发:—XX:+UseG1GC —XX:+UseConcMarkSweepGC,垃圾回收与应用并发进行,只需要短暂停,牺牲了整体吞吐量,减小了响应时间。

(一)jvm的更多相关文章

  1. 46张PPT讲述JVM体系结构、GC算法和调优

    本PPT从JVM体系结构概述.GC算法.Hotspot内存管理.Hotspot垃圾回收器.调优和监控工具六大方面进行讲述.(内嵌iframe,建议使用电脑浏览) 好东西当然要分享,PPT已上传可供下载 ...

  2. java 利用ManagementFactory获取jvm,os的一些信息--转

    原文地址:http://blog.csdn.net/dream_broken/article/details/49759043 想了解下某个Java项目的运行时jvm的情况,可以使用一些监控工具,比如 ...

  3. Jvm 内存浅析 及 GC个人学习总结

    从诞生至今,20多年过去,Java至今仍是使用最为广泛的语言.这仰赖于Java提供的各种技术和特性,让开发人员能优雅的编写高效的程序.今天我们就来说说Java的一项基本但非常重要的技术内存管理 了解C ...

  4. JVM类加载

    JVM的类加载机制就是:JVM把描述类的class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被JVM直接使用的Java类型 ClassLoader JVM中的ClassLoade ...

  5. Java虚拟机 JVM

    finalize();(不建议使用,代价高,不确定性大) 如果你在一个类中覆写了finalize()方法, 那么你可以在第一次被GC的时候,挽救一个你想挽救的对象,让其不被回收,但只能挽救一次. GC ...

  6. 在 Linux 中安装 Oracle JDK 8 以及 JVM 的类加载机制

    参考资料 该文中的内容来源于 Oracle 的官方文档 Java SE Tools Reference .Oracle 在 Java 方面的文档是非常完善的.对 Java 8 感兴趣的朋友,可以直接找 ...

  7. MapReduce剖析笔记之六:TaskTracker初始化任务并启动JVM过程

    在上面一节我们分析了JobTracker调用JobQueueTaskScheduler进行任务分配,JobQueueTaskScheduler又调用JobInProgress按照一定顺序查找任务的流程 ...

  8. java太low,又舍不得jvm平台的丰富资源?试试kotlin吧(一)

    尝试kotlin的起因 因为各种原因(版权,人员招聘),公司的技术体系从c#转到了java,我花了大概两周的时间来上手java,发现java的语法还是非常简单的,基本看着代码就知道什么意思.学习jav ...

  9. Jvm --- 常用工具

    jps:虚拟机进程状况工具 JVM Process Status Tool. 可以列出所有目前正在运行虚拟机的进程. jps -l 详细参数: -q 输出LVMID,省略主类名称 -m 输出虚拟机进程 ...

  10. JVM虚拟机结构

    JVM的主要结构如下图所示,图片引用自舒の随想日记. 方法区和堆由所有线程共享,其他区域都是线程私有的 程序计数器(Program Counter Register) 类似于PC寄存器,是一块较小的内 ...

随机推荐

  1. 使用Spring的JAVA Mail支持简化邮件发送

    http://www.cnblogs.com/codeplus/archive/2011/11/03/2232893.html

  2. BZOJ2652 : 三角板

    首先旋转坐标系,假设$(x,y)$被$(X,Y)$遮挡等价于$X\leq x$且$Y\leq y$. 对于每种坐标系建立两棵线段树: 第一棵按$x$维护已经加入的点的$y$的最小值: 第二棵按$x$维 ...

  3. MySQL设置当前时间为默认值的方法

    方法一.是用alert table语句: 复制代码代码如下: use test_db1; create table test_ta1( id mediumint(8) unsigned not nul ...

  4. 限制Boltzmann机(Restricted Boltzmann Machine)

    起源:Boltzmann神经网络 Boltzmann神经网络的结构是由Hopfield递归神经网络改良过来的,Hopfield中引入了统计物理学的能量函数的概念. 即,cost函数由统计物理学的能量函 ...

  5. 关于jsp乱码问题的产生原因 及 解决方法。

    http://blog.csdn.net/caoxiaohong/article/details/1781777 JSP/JDBC MySQL乱码问题JSP的request 默认为ISO8859_1, ...

  6. ACM: Just a Hook 解题报告 -线段树

    E - Just a Hook Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u   D ...

  7. [知识点]计算几何I——基础知识与多边形面积

    // 此博文为迁移而来,写于2015年4月9日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102vxaq.html 1.前言 ...

  8. 【BZOJ】3621: 我想那还真是令人高兴啊

    http://www.lydsy.com/JudgeOnline/problem.php?id=3621 题意:给两个三角形,问A能否通过旋转伸缩到B. #include <bits/stdc+ ...

  9. 【COGS】894. 追查坏牛奶

    http://cojs.tk/cogs/problem/problem.php?pid=894 题意:n个点m条边的加权网络,求最少边数的按编号字典序最小的最小割.(n<=32, m<=1 ...

  10. 【wikioi】1014 装箱问题

    题目链接 算法:动态规划(01背包) 01背包思想:依次对待某一物体,考虑是否放入容量为V的背包中 用f[V]来表示容量为V的背包的最大价值,则决策是 f[V] = max{f[V], f[V-v[i ...