JVM调优总结(一) 一些概念数据类型Java虚拟机中,数据类型可以分为两类:基本类型和引用类型。基本类型的变量保存原始值,即:他代表的值就是数值本身;而引用类型的变量保存引用值。“引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。基本类型包括:byte,sh...
分类:
其他好文 时间:
2015-07-02 17:18:40
阅读次数:
131
SUN的JDK从1.3.1开始使用HotSpot虚拟机技术,主要使用C++实现,JNI接口部分用C实现.
JAVA原先是把源代码编译为字节码在虚拟机执行,这样执行速度较慢.而HotSpot编译器将常用的部分代码编译为本地(native)代码,这样显著高了性能.
HotSpot包括一个解释器和两个编译器,解释与编译混合执行模式,默认启动解释执行。
编译器:java源代码被编译器编译成class...
分类:
其他好文 时间:
2015-07-02 10:19:41
阅读次数:
124
JVM常用调试用参数:
–verbose:gc在虚拟机发生内存回收时在输出设备显示信息
-Xloggc:filename把GC相关日志信息记录到文件以便分析
-XX:-HeapDumpOnOutOfMemoryError当首次遭遇OOM时导出此时堆中相关信息
-XX:OnError=";" 出现致命ERROR之后运行自定义命令
-XX:-PrintClassHistogram遇到Ctrl...
分类:
其他好文 时间:
2015-07-02 10:18:12
阅读次数:
146
JVM的类加载是通过ClassLoader及其子类来完成的,类的层次关系和加载顺序可以由下图来描述:
每个ClassLoader加载Class的过程是:
1.检测此Class是否载入过(即在cache中是否有此Class),如果有到8,如果没有到2
2.如果parent classloader不存在(没有parent,那parent一定是bootstrap),到4
3.请求parent c...
分类:
其他好文 时间:
2015-07-02 10:18:07
阅读次数:
244
1) Method Area
2) Heap
3) Java Stacks
4) PC Registers
5) Native Method Stacks
JAVA的JVM的内存模型大致可分为3个区:
堆区:
1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)
2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放...
分类:
其他好文 时间:
2015-07-02 10:18:05
阅读次数:
112
跟踪收集算法:
复制(copying):
将堆内分成两个相同空间,从根(ThreadLocal的对象,静态对象)开始访问每一个关联的活跃对象,将空间A的活跃对象全部复制到空间B,然后一次性回收整个空间A。因为只访问活跃对象,将所有活动对象复制走之后就清空整个空间,不用去访问死对象,不需要标记骤,所以遍历空间的成本较小,但需要巨大的复制成本和较多的内存。
标记清除(mark-sweep):
...
分类:
其他好文 时间:
2015-07-02 10:17:13
阅读次数:
263
引言
在一些物理内存为8g的服务器上,主要运行一个Java服务,系统内存分配如下:Java服务的JVM堆大小设置为6g,一个监控进程占用大约600m,Linux自身使用大约800m。从表面上,物理内存应该是足够使用的;但实际运行的情况是,会发生大量使用SWAP(说明物理内存不够使用了),如下图所示。同时,由于SWAP和GC同时发生会致使JVM严重卡顿,所以我们要追问:内存究竟去哪儿了?
...
分类:
系统相关 时间:
2015-07-01 10:09:29
阅读次数:
157
##5.1 Java虚拟机内存模型## Java虚拟机内存模型是Java程序运行的基础。JVM将其内存数据分为程序计数器,虚拟机栈,本地方法栈,Java堆和方法区等部分。 **程序计数器**:用于存放下一条运行的指令; **虚拟机栈和...
分类:
其他好文 时间:
2015-05-09 23:44:50
阅读次数:
288
本文转自:http://my.oschina.net/xishuixixia/blog/132395常用的调优参数。1.堆大小-Xms和-Xmx用于指定堆大小,我们需要将他们俩设置为一样的值,以避免在GC后重新调整堆的大小。2.年轻代大小-XX:NewSize=?和–XX:MaxNewSize=?,...
分类:
其他好文 时间:
2015-05-03 15:54:03
阅读次数:
130
想验证你对 jvm 配的一些调优参数有没有起作用吗?想不想实时监控你自定义的线程池的在实际运行时的线程个数、有没有死锁?想不想实时监控你的 Java 应用的堆内存使用情况,并根据峰值等数据设置最适合你的 Xms、Xmx 等参数?想不想找到你的应用的永久区 PermGen 的使用峰值,并根据其去设置合理的 XX:PermSize、XX:MaxPermSize 等参数?如何根据应用实时的运行运行情况合理配置年轻代(Young Generation,即 Eden 区和两个 Survivor 区之和)和年老代(Ol...
分类:
编程语言 时间:
2015-04-15 21:31:02
阅读次数:
197