JVM体系结构之六:堆Heap之2:新生代及新生代里的两个Survivor区(下一轮S0与S1交换角色,如此循环往复)、常见调优参数
摘要:一、为什么会有年轻代 我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能。你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我们要找到哪些对象没用,这样就会对堆的所有区域进行扫描。而我们的很多对象都是朝生夕死的,如果分代的话,
阅读全文
posted @
2014-05-14 21:27
duanxz
阅读(728)
推荐(0)
java内存模型JMM
摘要:现代CPU 架构的形成 硬件的效率与一致性 Java 内存模型(JMM) 主内存与工作内存 主内存与工作内存交互协议 JMM对于volatile型变量的特殊规则 JMM针对long和double型变量的特殊规则 原子性、可见性与有序性 先行发生原则 1、概述:现代CPU架构的形成 一切从冯洛伊曼计算
阅读全文
posted @
2014-05-14 21:21
duanxz
阅读(1139)
推荐(0)
方法区之三:运行时常量池==了解String类的intern()方法、常量池介绍、常量池从Perm-->Heap
摘要:字符串常量池从1.7以后,移到了heap中。(1.6在永久代,1.7以后移动到了heap中)。 一、intern()定义及使用 相信绝大多数的人不会去用String类的intern方法,打开String类的源码发现这是一个本地方法,定义如下: 文档告诉我们该方法返回一个字符串对象的内部化引用。关于n
阅读全文
posted @
2014-03-20 15:59
duanxz
阅读(3471)
推荐(1)
Metaspace 之二--PermGen vs. Metaspace 运行时比较
摘要:PermGen vs. Metaspace 运行时比较 为了更好地理解Metaspace内存空间的运行时行为, 将进行以下几种场景的测试: 使用JDK1.7运行Java程序,监控并耗尽默认设定的85MB大小的PermGen内存空间。 使用JDK1.8运行Java程序,监控新Metaspace内存空间
阅读全文
posted @
2014-03-20 15:54
duanxz
阅读(1403)
推荐(0)
Metaspace 之一:Metaspace整体介绍(永久代被替换原因、元空间特点、元空间内存查看分析方法)
摘要:回顾 根据JVM内存区域的划分,简单的画了下方的这个示意图。区域主要分为两大块,一块是堆区(Heap),我们所New出的对象都会在堆区进行分配,在C语言中的malloc所分配的方法就是从Heap区获取的。而垃圾回收器主要是对堆区的内存进行回收的。 而另一部分则是非堆区,非堆区主要包括用于编译和保存本
阅读全文
posted @
2014-02-10 11:15
duanxz
阅读(64500)
推荐(9)
八、jdk工具之JvisualVM、JvisualVM之二--Java程序性能分析工具Java VisualVM
摘要:目录 一、jdk工具之jps(JVM Process Status Tools)命令使用 二、jdk命令之javah命令(C Header and Stub File Generator) 三、jdk工具之jstack(Java Stack Trace) 四、jdk工具之jstat命令(Java V
阅读全文
posted @
2013-12-26 18:26
duanxz
阅读(4470)
推荐(0)
JVM参数汇总
摘要:一、java启动参数共分为三类: 其一是标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容;其二是非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容;其三是非Stable参数(-XX),此类参数各个jvm实现会有所不同,这些都是不
阅读全文
posted @
2013-12-19 15:56
duanxz
阅读(7766)
推荐(0)
-Xbootclasspath参数、java -jar参数运行应用时classpath的设置方法
摘要:当用java -jar yourJarExe.jar来运行一个经过打包的应用程序的时候,你会发现如何设置-classpath参数应用程序都找不到相应的第三方类,报ClassNotFound错误。实际上这是由于当使用-jar参数运行的时候,java VM会屏蔽所有的外部classpath,而只以本身y
阅读全文
posted @
2013-12-19 15:38
duanxz
阅读(14250)
推荐(1)
四、jdk工具之jstat命令2(Java Virtual Machine Statistics Monitoring Tool)详解
摘要:目录 一、jdk工具之jps(JVM Process Status Tools)命令使用 二、jdk命令之javah命令(C Header and Stub File Generator) 三、jdk工具之jstack(Java Stack Trace) 四、jdk工具之jstat命令(Java V
阅读全文
posted @
2012-11-29 15:38
duanxz
阅读(2366)
推荐(0)
远程监控JVM之二、 八、jdk工具之JvisualVM之三--可视化监控及LINUX服务器与客户端配置方法)、 远程监控Tomcat、Jstatd
摘要:如何配置visualvm监控 我们经常需要对我们的开发的软件做各种测试, 软件对系统资源的使用情况更是不可少, 目前有多个监控工具,相比JProfiler对系统资源尤其是内存的消耗是非常庞大,JDK1.6开始自带的VisualVM就是不错的监控工具。这个工具就在JAVA_HOME\bin\目录下的j
阅读全文
posted @
2012-10-26 09:19
duanxz
阅读(5545)
推荐(0)
mat之三--PermGen Metaspace永久代内存分析
摘要:一、jdk1.6上的perm gen 我们在上2篇文章中知道,perm gen是个异类,里面存储了类和方法数据(与class loader有关)以及interned strings(字符串驻留)。在heap dump中没有包含太多的perm gen信息。那么我们就用这些少量的信息来解决问题吧。 看下
阅读全文
posted @
2012-10-25 15:05
duanxz
阅读(2474)
推荐(0)
远程监控JVM之一--命令行(通过jstatd采集,jstat远程获取jvm运行数据)
摘要:在被监测的服务器(远程机器)上需要启动一个daemon:jstatd1、远程机器启动jstatd1.1、首先需要准备一个java.policy文件,保存到如/home/admin/jstatd.java.policygrant codebase "file:${java.home}/../lib/t
阅读全文
posted @
2012-10-25 14:48
duanxz
阅读(1401)
推荐(0)
一张图看懂JVM
摘要:JVM结构示意图 JVM总体概述 JVM总体上是由类装载子系统(ClassLoader)、运行时数据区、执行引擎、内存回收这四个部分组成。其中我们最为关注的运行时数据区,也就是JVM的内存部分则是由方法区(Method Area)、JAVA堆(Heap)、虚拟机栈(Stack)、程序计数器、本地方法
阅读全文
posted @
2012-08-14 09:42
duanxz
阅读(1121)
推荐(2)
原生内存(堆外内存)
摘要:在JVM使用的内存中,通常堆消耗的部分最多,但是JVM也会为内部操作分配一些内部。这些非堆内存就是原生内存。 应用中可以通过JNI的malloc()类似的方法或者是使用NIO的API分配。JVM使用的原生内存和堆内存的总量,就是一个应用总的内存占用(Footprint)。 1、测量内存占用 unix
阅读全文
posted @
2012-08-09 15:00
duanxz
阅读(4949)
推荐(1)
Unsafe魔术类(java可直接操作内存(),挂起与恢复,CAS操作)
摘要:java为什么会引入unsafe类 sun.misc.Unsafe至少从2004年Java1.4开始就存在于Java中了。在Java9中,为了提高JVM的可维护性,Unsafe和许多其他的东西一起都被作为内部使用类隐藏起来了。但是究竟是什么取代Unsafe不得而知,个人推测会有不止一样来取代它,那么
阅读全文
posted @
2012-08-08 16:25
duanxz
阅读(2006)
推荐(1)