GC停顿问题分析

1. 由于promotion failed引起应用响应时间上升,超时

83

首先,从日志上来看,在Allocation failure之后,JVM同时进行了CMS,这似乎跟对CMS的理解不一致。

回归一下CMS的垃圾回收过程,大概分下面几个阶段:

  • initial mark
  • concurrent marking
  • remark
  • concurrent sweep
  • resetting

其中,concurrent的是跟应用进程同步进行的,也即stop-the-w[......]

Read more

Posted in JVM | Tagged , | Leave a comment

《The Definitive Guide ——JRockit虚拟机》 笔记

1. 从JVM层次来说final修饰方法带来的好处

JVM对方法的调用分两种,直接调用(方法只有一个实现)以及间接调用(多态情况下,方法可能有多个实现,需要在dispatch表中查找以确实是使用哪个地址)。

 

对于JIT来说,如果JVM能确定方法只有一个实现,则可以采用直接调用方式将其编译到native代码,这能提供程序的效率,但是,除非方法是被final修饰的,否则其可能在任何时候被覆盖。

 

2. JIT编译器及JVM一般会做出的假设[......]

Read more

Posted in JVM, 读书笔记 | Tagged | Leave a comment

Java安全与类加载框架——一窥类加载器在JVM安全模型中所扮演的角色(续)

命名空间和盾

正如前面所述,命名空间对安全的贡献在于,它在不同的类加载器之前放置了一个盾,在JVM内,身处同一个命名空间的类相互间可以进行交互,然后不同命名空间中的类甚至不知道对方的存在,除非我们显示提供一种允许他们进行交互的方式。如果一个恶意类,一加载即可访问JVM当前加载的所有类,那么它将可能了解到一些它不应该知道的东西,甚至是干扰你程序的正常运行。

 

创建一个安全的环境

当你编写一个使用类加载器的应用时,你便创建了一个动态加载代码运行的环境,如果你想要这[......]

Read more

Posted in JVM | Tagged | Leave a comment

Java安全与类加载框架——一窥类加载器在JVM安全模型中所扮演的角色

原文出自Java World:http://www.javaworld.com/article/2077009/core-java/security-and-the-class-loader-architecture.html

 

上个月的文章“Under the Hood”对JVM内建的安全机制进行了一个整体的介绍,本月的文章将继续Java的安全模型这个课题,深入分析JVM的内建安全机制:类加载器框架。

 

沙箱概念回顾

Java的安全模型聚焦[......]

Read more

Posted in JVM | Tagged | Leave a comment

sun.misc.Unsafe类

这个类提供了一些底层的操作,可以直接操作内存,支持CAS指令的实现。因此docs中提示它是“Unsafe”的,当然,当我们调用getUnsafe函数获取Unsafe类实例时,getUnsafe会判断调用方类的类加载器,如果不是系统类加载器则会抛安全异常。但是获取了实例以后,参数的传递就不可控了,所以安全问题由调用方来控制。

 

Unsafe提供的功能在Java的锁实现中得到了广泛的使用,无论是JDK本身concurrent包的实现,还是一些框架,如Tomcat中都可以看到其[......]

Read more

Posted in Java | Tagged | Leave a comment

java.lang.management的使用

      与JVM性能检测相关的三个比较重要的技术:
  • java.lang.instrument, 这个在CSDN那边曾写过一个简单,它使我们能在运行时动态改变class的字节码。其实它就是提供了一个JVM TI的功能子集,不过功能依旧已经足够强大,Bstrace等工具中就有它的身影。
  • Java attach API, 可以通过它连接到JVM,并加载agent等。
  • [......]

Read more

Posted in JVM | Tagged , , | Leave a comment

深入理解JVM内部结构

001

001

(译文,原先发在本人的csdn博客上)这篇文章主要是解释java虚拟机(JVM)的内部结构。下图显示了符合Java SE 7 版本的Java虚拟机规范的一个典型JVM中的关键内部组件。

001

       图中显示的组件将会在下面两部分中进行逐一的解释。第一部分涉及JVM为每一个线程都会创建的组件;第二部分则是独立于线程进行创建的组件。
1. Thread
      Thread是一个程序中的一个执行线程。JVM允许一个应用程序有多个执行线程并发运行。在Sun的Ho[......]

Read more

Posted in JVM | Tagged | Leave a comment