- 浏览: 3066490 次
- 性别:
- 来自: 海外
-
最新评论
-
mldxs:
虽然很多还是看不懂,写的很好!
虚拟机随谈(一):解释器,树遍历解释器,基于栈与基于寄存器,大杂烩 -
HanyuKing:
Java的多维数组 -
funnyone:
Java 8的default method与method resolution -
ljs_nogard:
Xamarin workbook - .Net Core 中不 ...
LINQ的恶搞…… -
txm119161336:
allocatestlye1 顺序为 // Fields o ...
最近做的两次Java/JVM分享的概要
文章列表
使用Oracle/Sun JDK来运行Java程序的时候,大家或许有用过jstat工具来观察GC的统计数据,例如上一篇日志里的
$ jstat -gcutil `pgrep -u admin java`
S0 S1 E O P YGC YGCT FGC FGCT GCT
37.21 0.00 99.81 12.87 76.82 1767 196.843 3085 2998.088 3194.931
以前写过一帖说明jstat工具显示的读数与jvmstat计数器之前的关系:用Java获取ful ...
随便记一下。
今天有个应用说是full GC过于频繁。看了下发现执行的都是CMS GC,并不是真的stop-the-world的full GC。但确实是很频繁,几秒就触发一次。
堆的使用状况,eden/SS0/SS1的使用量都没啥特别的,old gen大概用了10%+,而perm gen用了70%+。光看空间占用量的话,都还达不到CMS的触发条件。.
$ jstat -gcutil `pgrep -u admin java` 1s
S0 S1 E O P YGC YGCT FGC FGCT GCT
37.2 ...
今天有朋友提到一个叫 ReflectASM的库,为Java环境提供高性能的反射操作支持。它的实现方式是动态代码生成。
以前我的一篇日志里写过,Oracle/Sun JDK6的反射方法调用的实现当中重要的一环就是动态代码生成。
但是今天的主角不是ReflectASM,而是Oracle/Sun JDK里的sun.misc.Unsafe类,以及这个类上的getInt(Object, long)方法:
引用/**
* Fetches a value from a given Java variable.
* More specifically, fetches a field or array ...
前一篇:观察NIO的direct memory使用量?
前一篇说的是在当前的Oracle/Sun JDK6上没啥好办法去监视NIO的direct memory使用量。不过这个问题在JDK7里其实已经有解决的。从JDK7 build 36开始就有了吧。
解决的方式就是:给NIO也带上JMX的监控API。这才是正道啊!
从JDK7版的java.nio.Bits源码里可以看到注册MXBean注册的代码。
相关的MXBean有以下两个:
1. objectName: java.nio:type=BufferPool,name=direct
2. objectName: java.nio:type= ...
前几天有同事问起,我本来印象中是有啥别的办法的,但想不起来了。
再看了看NIO相关部分的源码觉得貌似就这个办法靠谱(在Oracle/Sun的JDK上):
StackOverflow: Looking up how much direct buffer memory is available to Java?
通过反射获取java.nio.Bits类里的maxMemory与reservedMemory字段来达到观察的目的。
用Groovy演示一下:
D:\sdk\groovy-1.7.6\bin>groovysh
Groovy Shell (1.7.6, JVM: 1.6.0_26)
...
有人问下面这段代码里,main()方法里的outer.new Inner()部分为什么会生成了一个对outer.getClass()的调用:
public class Outer {
public class Inner { }
public static void main(String[] args) {
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
}
}
javac编译它生成的main方法的代码是:
public static void main(java.lan ...
随着7月28日,也就是Java SE 7预定的发布日期越来越近,相关的一些规范也已得到或即将得到批准。
这里主要关注的是下面几个规范:
JSR 336: Java™ SE 7 Release Contents
JSR 901: Java™ Language Specification
JSR 924: Java™ Virtual Machine Specification
新的Oracle官网Java规范页面:http://docs.oracle.com/javase/specs/index.html
另外可以通过JSR 336来获取Java SE 7的各种文档的不同版本。例如说其中的附录3 ...
打捞回复帖。嗯这无聊的语法问题…
原文地址:http://www.iteye.com/topic/1064881?page=6#2136913
lion1354 写道好吧看代码,把下面两段代码粘到eclipse中你就会知道了
public class Test
{
public static void main(String[] args)
{
if (true)
{
String i = new String("Test");
}
}
}
上面的编译正确
public class Test
{
public ...
昨天和今天。过了两天完全没有编程、完全没有JVM的生活。
不过与其说是“生活”,还不如说就是一直在家睡觉。
早上还是按着已经养成习惯的时间醒来,却没啥力气,脑袋也是一片昏沉。
现在的工作本身其实并没有多少压力,只要完成工作量的话估计连加班都不用吧。
但前段时间实在是太兴奋,工作内容变得跟自己兴趣一致,白天夜晚都高强度的投入到里面去。
最近一个月平均下来每天睡眠的时间也就4-5小时。少的时候就1-2小时。
结果今天吊水去了。刚吊完回来。明天还有一次。
就这样钱包里的4张红老毛子就没了。交完钱还想着“这次好便宜”…去年端午节摔一跤就损失了600左右。
索性就趁此机会休息一下吧。诶。
继续打捞站内信。
同学F 写道在java中的数组访问,举个例子,对于数组int[][][] arry = new int[2][3][4],我从字节码上看,虚拟机对某个arry中的某个元素如arry[1][1][3]的访问,似乎是先获取arry[1]的引用,然后再获取arry[1][1]的引用,再获取数据arry[1][1][3],如果这个过程我没有理解错的话,那么虚拟机是不是对这些“中间引用”(arry[1]、arry[1][1]之类的)创建相应的类型,否则单凭这些引用如何进行数组下表的越界校验?
Java和JVM里本来就没有所谓的“矩形数组”的概念,多维数组只有“数组的数组”(array ...
上一篇:通过JMX控制在full GC前后做heap dump
想像一个Java进程在远程服务器上突然遇到频繁full GC的状况。我们只是想动态的改变HeapDumpBeforeFullGC与HeapDumpAfterFullGC参数来获取full GC前后的heap dump,并不想在侵入到Java程序内去通过代码 ...
后一篇:通过jinfo工具在full GC前后做heap dump
有时候我们想知道一个Java程序在一次full GC的时候到底回收了哪些对象。特别是当full GC看起来很频密但系统看起来却又没有内存泄漏的时候,了解究竟是哪些对象引致了这些GC会对调优有帮助。
做了个简单的例子,讲解一种简单的办法在full GC的前后得到heap dump。本文说的办法只能在HotSpot VM上使用;其它JVM要达到同样的目的或许有其它做法,回头有机会再说。
(同样的工作在JRockit或者J9上做似乎都更容易些… )
======================================== ...
继续打捞一些零散的文字。这次是ItEye站内信里的一段对话。
下面是问题和回复内容,带补充。
===================================================================
问题
月初的时候收到这样一个问题:
同学F 写道请教下,识jvm堆栈中一个数据 ...
把先前在论坛回复的一些帖打捞进来。这篇的原帖是:HotSpot VM 内存堆的两个Survivor区
下面是回复内容,带补充。
=================================================================
kingkan 写道请教下前辈们:
1.手动System.gc()与JVM自动gc有什么根 ...
把先前在论坛回复的一些帖打捞进来。这篇的原帖是:JAVA6可以使用字符串累加
下面是回复内容,带补充。
=================================================================
javabkb 写道听过sajia老师讲的视频 记得1.4后的hotspot就有这个编译优化效果了
<< 我肯定没有这样说过…这帖里说的东西都跟HotSpot(或者其它JVM实现)一点关系都没有,还在Java源码级编译器层次上…
javabkb 写道但是一直有个问题,即使是编译优化了,用加号拼接的效率还是不如用stringbuilder的
< ...