2016年11月25日
摘要:
1、内存分配有哪些策略 我们从编译原理讲起,不同的开发环境、开发语言都会有不同的策略。一般来说,程序运行时有三种内存分配策略:静态的、栈式的、堆式的 静态存储是指在编译时就能够确定每个数据目标在运行时的存储空间需求,因而在编译时就可以给它们分配固定的内存空间。 这种分配策略要求程序代码中不允许有可变
阅读全文
posted @ 2016-11-25 17:43
duanxz
阅读(3132)
推荐(0)
2016年11月24日
摘要:
高效并发是JDK 1.6的一个重要主题,HotSpot虚拟机开发团队在这个版本上花费了大量的精力去实现各种锁优化技术,如适应性自旋(Adaptive Spinning)、锁削除(Lock Elimination)、锁膨胀(Lock Coarsening)、轻量级锁(Lightweight Locki
阅读全文
posted @ 2016-11-24 23:26
duanxz
阅读(852)
推荐(1)
摘要:
竞态条件 线程之间共享堆空间。同一个程序多线程访问同一个资源时,如果对资源的访问顺序敏感,就称存在竞态条件,代码区成为临界区。 例如:先检测后执行。执行依赖于检测的结果,而检测结果依赖于多个线程的执行时序,而多个线程的执行时序通常情况下是不固定不可判断的,从而导致执行结果出现各种问题。 线程安全 什
阅读全文
posted @ 2016-11-24 23:25
duanxz
阅读(1383)
推荐(0)
摘要:
1.概述 Java虚拟机的数据类型可分为两大类:原始类型(Primitive Types,也称为基本类型)和引用类型(Reference Types)。Java虚拟机用不同的字节码指令来操作不同的数据类型 。 2.原始类型 原始类型是最基本的元素,用于构成复杂的引用类型。与世间万物一样,都是由最基本
阅读全文
posted @ 2016-11-24 21:05
duanxz
阅读(2199)
推荐(0)
摘要:
HotSpot JVM的并发标记清理收集器(CMS收集器)的主要目标就是:低应用停顿时间。该目标对于大多数交互式应用很重要,比如web应用。在我们看一下有关JVM的参数之前,让我们简要回顾CMS收集器的操作和使用它时可能出现的主要挑战。 CMS收集器有3种基本的操作,分别是: CMS收集器会对新生代
阅读全文
posted @ 2016-11-24 18:20
duanxz
阅读(2133)
推荐(0)
摘要:
本系列的最后一部分是有关垃圾收集(GC)日志的JVM参数。GC日志是一个很重要的工具,它准确记录了每一次的GC的执行时间和执行结果,通过分析GC日志可以优化堆设置和GC设置,或者改进应用程序的对象分配模式。 -XX:+PrintGC 参数-XX:+PrintGC(或者-verbose:gc)开启了简
阅读全文
posted @ 2016-11-24 18:20
duanxz
阅读(986)
推荐(0)
摘要:
在实践中我们发现对于大多数的应用领域,评估一个垃圾收集(GC)算法如何根据如下两个标准: 首先让我们来明确垃圾收集(GC)中的两个术语:吞吐量(throughput)和暂停时间(pause times)。 JVM在专门的线程(GC threads)中执行GC。 只要GC线程是活动的,它们将与应用程序
阅读全文
posted @ 2016-11-24 18:19
duanxz
阅读(2912)
推荐(1)
摘要:
本部分,我们将关注堆(heap) 中一个主要区域,新生代(young generation)。首先我们会讨论为什么调整新生代的参数会对应用的性能如此重要,接着我们将学习新生代相关的JVM参数。 单纯从JVM的功能考虑,并不需要新生代,完全可以针对整个堆进行操作。新生代存在的唯一理由是优化垃圾回收(G
阅读全文
posted @ 2016-11-24 18:18
duanxz
阅读(813)
推荐(0)
摘要:
理想的情况下,一个Java程序使用JVM的默认设置也可以运行得很好,所以一般来说,没有必要设置任何JVM参数。然而,由于一些性能问题(很不幸的是,这些问题经常出现),一些相关的JVM参数知识会是我们工作中得好伙伴。在这篇文章中,我们将介绍一些关于JVM内存管理的参数。知道并理解这些参数,将对开发者和
阅读全文
posted @ 2016-11-24 18:15
duanxz
阅读(1322)
推荐(0)
摘要:
在这个系列的第二部分,我来介绍一下HotSpot JVM提供的不同类别的参数。我同样会讨论一些关于JIT编译器诊断的有趣参数。 JVM 参数分类 HotSpot JVM 提供了三类参数。第一类包括了标准参数。顾名思义,标准参数中包括功能和输出的参数都是很稳定的,很可能在将来的JVM版本中不会改变。你
阅读全文
posted @ 2016-11-24 18:14
duanxz
阅读(1265)
推荐(0)
摘要:
本篇文章基于Java 6(update 21oder 21之后)版本, HotSpot JVM 提供给了两个新的参数,在JVM启动后,在命令行中可以输出所有XX参数和值。 -XX:+PrintFlagsFinal and -XX:+PrintFlagsInitial 让我们现在就了解一下新参数的输出
阅读全文
posted @ 2016-11-24 18:14
duanxz
阅读(5862)
推荐(0)
摘要:
现在的JVM运行Java程序(和其它的兼容性语言)时在高效性和稳定性方面做的非常出色。自适应内存管理、垃圾收集、及时编译、动态类加载、锁优化——这里仅仅列举了某些场景下会发生的神奇的事情,但他们几乎不会直接与普通的程序员相关。在运行时,JVM会不断的计算并优化应用或者应用的某些部分。 虽然有了这种程
阅读全文
posted @ 2016-11-24 18:13
duanxz
阅读(1566)
推荐(0)
摘要:
本篇主要讲解如何使用直接内存(堆外内存),并按照下面的步骤进行说明: 相关背景-->读写操作-->关键属性-->读写实践-->扩展-->参考说明 相关背景-->读写操作-->关键属性-->读写实践-->扩展-->参考说明 希望对想使用直接内存的朋友,提供点快捷的参考。 数据类型 下面这些,都是在使用
阅读全文
posted @ 2016-11-24 15:17
duanxz
阅读(1382)
推荐(0)
摘要:
@sun.misc.Contended 介绍 @sun.misc.Contended 是 Java 8 新增的一个注解,对某字段加上该注解则表示该字段会单独占用一个缓存行(Cache Line)。 这里的缓存行是指 CPU 缓存(L1、L2、L3)的存储单元,常见的缓存行大小为 64 字节。 (注:
阅读全文
posted @ 2016-11-24 14:47
duanxz
阅读(3025)
推荐(0)
2016年11月23日
摘要:
身为一名Java程序员,大家可能都有这样的经历:调用一个方法得到了返回值却不能直接将返回值作为参数去调用别的方法。我们首先要判断这个返回值是否为null,只有在非空的前提下才能将其作为其他方法的参数。这正是一些类似Guava的外部API试图解决的问题。一些JVM编程语言比如Scala、Ceylon等
阅读全文
posted @ 2016-11-23 22:18
duanxz
阅读(764)
推荐(0)
摘要:
分析java语言特性的一个好帮手是使用javap工具查看java编译后的字节码,楼主今天在学习java泛型中的桥方法时遇到一些不解,想到javap这个好工具可以帮助解答一些疑惑,索性就捣鼓如何在eclipse中配置javap工具快速查看java字节码。 楼主学习的代码工程用的maven结构。默认ja
阅读全文
posted @ 2016-11-23 17:44
duanxz
阅读(2814)
推荐(1)
摘要:
Java 应用性能优化是一个老生常谈的话题,笔者根据个人经验,将 Java 性能优化分为 4 个层级:应用层、数据库层、框架层、JVM 层。通过介绍 Java 性能诊断工具和思路,给出搜狗商业平台的性能优化案例以供参考。 Java 应用性能优化是一个老生常谈的话题,笔者根据个人经验,将 Java 性
阅读全文
posted @ 2016-11-23 11:30
duanxz
阅读(10002)
推荐(3)
摘要:
性能测试排查定位问题,分析调优过程中,会遇到要分析gc日志,人肉分析gc日志有时比较困难,相关图形化或命令行工具可以有效地帮助辅助分析。 Gc日志参数 通过在tomcat启动脚本中添加相关参数生成gc日志 -verbose.gc开关可显示GC的操作内容。打开它,可以显示最忙和最空闲收集行为发生的时间
阅读全文
posted @ 2016-11-23 11:10
duanxz
阅读(16464)
推荐(1)
2016年11月22日
摘要:
目录: GC之一--GC 的算法分析、垃圾收集器、内存分配策略介绍 GC之二--GC日志分析(jdk1.8)整理中 GC之三--GC 触发Full GC执行的情况及应对策略 gc之四--Minor GC、Major GC和Full GC之间的区别 GC之六--SystemGC完全解读 堆内存划分为
阅读全文
posted @ 2016-11-22 22:48
duanxz
阅读(4196)
推荐(0)
摘要:
在nio以前,是没有光明正大的做法的,有一个work around的办法是直接访问Unsafe类。如果你使用Eclipse,默认是不允许访问sun.misc下面的类的,你需要稍微修改一下,给Type Access Rules里面添加一条所有类都可以访问的规则: 在使用Unsafe类的时候: 发现还是
阅读全文
posted @ 2016-11-22 18:41
duanxz
阅读(7439)
推荐(0)
摘要:
本文建立在对instrumentation和agent有初步的了解的前提下阅读,关于这2个类的讲解在其它文章中。 这是一个maven项目,pom中需要的配置,lib中有asm的jar包 pom.xml文件: 打包后的agent的jar包中manifest属性如下: agent类,只有一个方法,就是把
阅读全文
posted @ 2016-11-22 17:31
duanxz
阅读(4573)
推荐(2)
摘要:
一、JVM内存的分配及垃圾回收 对于JVM的内存规则,应该是老生常谈的东西了,这里我就简单的说下: 新生代:一般来说新创建的对象都分配在这里。 年老代:经过几次垃圾回收,新生代的对象就会放在年老代里面。年老代中的对象保存的时间更久。 永久代:这里面存放的是class相关的信息,一般是不会进行垃圾回收
阅读全文
posted @ 2016-11-22 15:16
duanxz
阅读(20838)
推荐(9)
摘要:
一、堆外内存组成 通常JVM的参数我们会配置 -Xms 堆初始内存 -Xmx 堆最大内存 -XX:+UseG1GC/CMS 垃圾回收器 -XX:+DisableExplicitGC 禁止显示GC -XX:MaxDirectMemorySize 设置最大堆外内存,默认是-xmx-survivor,也就
阅读全文
posted @ 2016-11-22 15:07
duanxz
阅读(23712)
推荐(0)
摘要:
目录: GC之一--GC 的算法分析、垃圾收集器、内存分配策略介绍 GC之二--GC日志分析(jdk1.8)整理中 GC之三--GC 触发Full GC执行的情况及应对策略 gc之四--Minor GC、Major GC和Full GC之间的区别 GC之六--SystemGC完全解读 概述 JVM的
阅读全文
posted @ 2016-11-22 15:06
duanxz
阅读(3243)
推荐(0)
摘要:
目录: 《堆外内存操作类ByteBuffer》 《DirectBuffer》 《Unsafe(java可直接操作内存(),挂起与恢复,CAS操作)》 有时候对内存进行大对象的读写,会引起JVM长时间的停顿,有时候则是希望最大程度地提高JVM的效率,我们需要自己来管理内存(看起来很像是Java像C++
阅读全文
posted @ 2016-11-22 11:22
duanxz
阅读(1814)
推荐(0)