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. ACM ICPC 2015 Moscow Subregional Russia, Moscow, Dolgoprudny, October, 18, 2015 G. Garden Gathering

    Problem G. Garden Gathering Input file: standard input Output file: standard output Time limit: 3 se ...

  2. 【转】推荐UML插件AmaterasUML

    基于Green UML在使用过程中的问题(对于大工程,点击生成类图后不响应),自己只能再次寻找其他的插件.在无意中,发现AmaterasUML. 官方网站:http://amateras.source ...

  3. oracle clob like

    create table products(  productid number(10) not null,  name varchar2(255),  description CLOB); 查询语句 ...

  4. Human and AI's future (reverie)

    However, I do notice that to make the dark situation happen, it doesn't require the topleft matrix t ...

  5. Android annotations REST

    使用前: public class BookmarksToClipboardActivity extends Activity { BookmarkAdapter adapter; ListView ...

  6. ACM: 限时训练题解-Heavy Coins-枚举子集-暴力枚举

    Heavy Coins   Bahosain has a lot of coins in his pocket. These coins are really heavy, so he always ...

  7. 转:关于垂直网格与CSS基线对其的探讨

    网页设计布局中一直比较流行网格对齐,但只是针对水平的对齐,很少或者没有涉及垂直对齐,这篇文章很详细的讲解了垂直网格,乃至基线对其的相关,而css3中的多列布局的也使其显得更为重要,因此还是很有必要去了 ...

  8. 崩溃恢复(crash recovery)与 AUTORESTART参数

    关于这个参数设置的影响,在生产系统中经历过两次:        第一次是有套不太重要的系统安装在虚拟机,这套系统所有应用(DB2 WAS IHS)都配置到/etc/rc.local中,每次启动机器会自 ...

  9. IOS 蓝牙相关-app作为外设被连接的实现(3)

    再上一节说了app作为central连接peripheral的情况,这一节介绍如何使用app发布一个peripheral,给其他的central连接 还是这张图,central模式用的都是左边的类,而 ...

  10. 腾讯云Linux系统中启动自己安装的tomcat

    腾讯云Linux系统中启动自己安装的tomcat 首先通过工具查看一下安装的tomcat的位置 进入命令行之后输入以下指令: 此时,tomcat已经启动了.