- 浏览: 3056681 次
- 性别:
- 来自: 海外
文章分类
- 全部博客 (430)
- Programming Languages (23)
- Compiler (20)
- Virtual Machine (57)
- Garbage Collection (4)
- HotSpot VM (26)
- Mono (2)
- SSCLI Rotor (1)
- Harmony (0)
- DLR (19)
- Ruby (28)
- C# (38)
- F# (3)
- Haskell (0)
- Scheme (1)
- Regular Expression (5)
- Python (4)
- ECMAScript (2)
- JavaScript (18)
- ActionScript (7)
- Squirrel (2)
- C (6)
- C++ (10)
- D (2)
- .NET (13)
- Java (86)
- Scala (1)
- Groovy (3)
- Optimization (6)
- Data Structure and Algorithm (3)
- Books (4)
- WPF (1)
- Game Engines (7)
- 吉里吉里 (12)
- UML (1)
- Reverse Engineering (11)
- NSIS (4)
- Utilities (3)
- Design Patterns (1)
- Visual Studio (9)
- Windows 7 (3)
- x86 Assembler (1)
- Android (2)
- School Assignment / Test (6)
- Anti-virus (1)
- REST (1)
- Profiling (1)
- misc (39)
- NetOA (12)
- rant (6)
- anime (5)
- Links (12)
- CLR (7)
- GC (1)
- OpenJDK (2)
- JVM (4)
- KVM (0)
- Rhino (1)
- LINQ (2)
- JScript (0)
- Nashorn (0)
- Dalvik (1)
- DTrace (0)
- LLVM (0)
- MSIL (0)
最新评论
-
mldxs:
虽然很多还是看不懂,写的很好!
虚拟机随谈(一):解释器,树遍历解释器,基于栈与基于寄存器,大杂烩 -
HanyuKing:
Java的多维数组 -
funnyone:
Java 8的default method与method resolution -
ljs_nogard:
Xamarin workbook - .Net Core 中不 ...
LINQ的恶搞…… -
txm119161336:
allocatestlye1 顺序为 // Fields o ...
最近做的两次Java/JVM分享的概要
For your information.
最近又看到有人提到java.lang.Integer的自动装箱的缓存大小问题。这里想提一下这个值在VM启动时是可配置的。下面例子使用32位Windows上的Sun JDK 1.6.0 update 18。
在Java语言规范第三版,5.1.7 Boxing Conversion中,
这就是为什么符合规范的Java实现必须保证Integer的缓存至少要覆盖[-128, 127]的范围。
使用Oracle/Sun JDK 6,在server模式下,使用-XX:AutoBoxCacheMax=NNN参数即可将Integer的自动缓存区间设置为[-128,NNN]。注意区间的下界固定在-128不可配置。
在client模式下该参数无效。这个参数是server模式专有的,在c2_globals.hpp中声明,默认值是128;不过这个默认值在默认条件下不起作用,要手动设置它的值或者是开启-XX:+AggressiveOpts参数才起作用。
在设置了-XX:+AggressiveOpts启动参数后,AutoBoxCacheMax的默认值会被修改为20000并且生效。参考arguments.cpp:
测试代码:
在命令行上测试:
中间报Unrecognized VM option 'AutoBoxCacheMax=1000'错误是因为这个参数只能在HotSpot Server VM上使用,在HotSpot Client VM上不支持。
哪里凄凉了,Java程序员咖啡时间多啊
这么乐观。
可惜我咖啡喝的很少。你说是不是很纠结。。。
哪里凄凉了,Java程序员咖啡时间多啊
不,几乎完全无关。除了整合Groovy是工作的一部分外,没有跟脚本相关的工作内容。
听你这些话 言语中透着 凄凉。。。。
看了一下,应该是从JDK 6 update 14开始变为可配置的。13的时候上界还是固定的127。不过AutoBoxCacheMax参数在13的时候就已经存在了(具体出现的时间可能更早);在14之前,该参数只在HotSpot一侧的代码里有出现,没设置到Java一侧的java.lang.Integer里。
不,几乎完全无关。除了整合Groovy是工作的一部分外,没有跟脚本相关的工作内容。
最近又看到有人提到java.lang.Integer的自动装箱的缓存大小问题。这里想提一下这个值在VM启动时是可配置的。下面例子使用32位Windows上的Sun JDK 1.6.0 update 18。
在Java语言规范第三版,5.1.7 Boxing Conversion中,
The Java Language Specification, 3rd Edition 写道
If the value p being boxed is true, false, a byte, a char in the range \u0000 to \u007f, or an int or short number between -128 and 127, then let r1 and r2 be the results of any two boxing conversions of p. It is always the case that r1 == r2.
这就是为什么符合规范的Java实现必须保证Integer的缓存至少要覆盖[-128, 127]的范围。
使用Oracle/Sun JDK 6,在server模式下,使用-XX:AutoBoxCacheMax=NNN参数即可将Integer的自动缓存区间设置为[-128,NNN]。注意区间的下界固定在-128不可配置。
在client模式下该参数无效。这个参数是server模式专有的,在c2_globals.hpp中声明,默认值是128;不过这个默认值在默认条件下不起作用,要手动设置它的值或者是开启-XX:+AggressiveOpts参数才起作用。
在设置了-XX:+AggressiveOpts启动参数后,AutoBoxCacheMax的默认值会被修改为20000并且生效。参考arguments.cpp:
// Aggressive optimization flags -XX:+AggressiveOpts void Arguments::set_aggressive_opts_flags() { #ifdef COMPILER2 if (AggressiveOpts || !FLAG_IS_DEFAULT(AutoBoxCacheMax)) { if (FLAG_IS_DEFAULT(EliminateAutoBox)) { FLAG_SET_DEFAULT(EliminateAutoBox, true); } if (FLAG_IS_DEFAULT(AutoBoxCacheMax)) { FLAG_SET_DEFAULT(AutoBoxCacheMax, 20000); } // Feed the cache size setting into the JDK char buffer[1024]; sprintf(buffer, "java.lang.Integer.IntegerCache.high=" INTX_FORMAT, AutoBoxCacheMax); add_property(buffer); } // ... #endif }
测试代码:
// run with: // java -server -XX:AutoBoxCacheMax=1000 TestAutoBoxCache public class TestAutoBoxCache { public static void main(String[] args) { Integer a = 1000; Integer b = 1000; System.out.println(a == b); Integer c = 1001; Integer d = 1001; System.out.println(c == d); Integer e = 20000; Integer f = 20000; System.out.println(e == f); } }
在命令行上测试:
D:\>javac TestAutoBoxCache.java D:\>java TestAutoBoxCache false false false D:\>java -server TestAutoBoxCache false false false D:\>java -Djava.lang.Integer.IntegerCache.high=1000 TestAutoBoxCache true false false D:\>java -server -Djava.lang.Integer.IntegerCache.high=1000 TestAutoBoxCache true false false D:\>java -Djava.lang.Integer.IntegerCache.high=1001 TestAutoBoxCache true true false D:\>java -server -Djava.lang.Integer.IntegerCache.high=1001 TestAutoBoxCache true true false D:\>java -XX:AutoBoxCacheMax=1000 TestAutoBoxCache Unrecognized VM option 'AutoBoxCacheMax=1000' Could not create the Java virtual machine. D:\>java -server -XX:AutoBoxCacheMax=1000 TestAutoBoxCache true false false D:\>java -server -XX:AutoBoxCacheMax=1001 TestAutoBoxCache true true false D:\>java -server -XX:+AggressiveOpts TestAutoBoxCache true true true
中间报Unrecognized VM option 'AutoBoxCacheMax=1000'错误是因为这个参数只能在HotSpot Server VM上使用,在HotSpot Client VM上不支持。
评论
10 楼
Trust_FreeDom
2016-10-25
请问像IntegerCache这种基本数据类型的Cache,是放在JVM的什么区域的?Integer类的运行时常量池??
JDK 1.7的去永久代应该只是将字符串常量池从永久代改到堆里了吧?运行时常量池还在方法区/永久代??
JDK 1.7的去永久代应该只是将字符串常量池从永久代改到堆里了吧?运行时常量池还在方法区/永久代??
9 楼
ZangXT
2010-06-25
_07是固定的,这么说,可以修改源代码来做。呵
需要重编译jdk了吧。
mercyblitz 写道
1.6.0_07是固定的,这么说,可以修改源代码来做。呵呵
需要重编译jdk了吧。
8 楼
mercyblitz
2010-06-23
1.6.0_07是固定的,这么说,可以修改源代码来做。呵呵
7 楼
yznxing
2010-06-11
RednaxelaFX 写道
yznxing 写道
听你这些话 言语中透着 凄凉。。。。
哪里凄凉了,Java程序员咖啡时间多啊
这么乐观。
可惜我咖啡喝的很少。你说是不是很纠结。。。
6 楼
RednaxelaFX
2010-06-08
yznxing 写道
听你这些话 言语中透着 凄凉。。。。
哪里凄凉了,Java程序员咖啡时间多啊
5 楼
yznxing
2010-06-08
RednaxelaFX 写道
lwwin 写道
忽然想问问FX大做什么的工作,是和脚本技术相关的开发研究吗^^?
感觉找你肯定是找对了~
感觉找你肯定是找对了~
不,几乎完全无关。除了整合Groovy是工作的一部分外,没有跟脚本相关的工作内容。
听你这些话 言语中透着 凄凉。。。。
4 楼
RednaxelaFX
2010-06-02
ZangXT 写道
JLS指定的是【-128,127】之间的数。不知道这个可配置型是从哪个版本开始引入的,我从安装的jdk1.6.0_10来看,Integer的cache还是这样设置的:
……
……
看了一下,应该是从JDK 6 update 14开始变为可配置的。13的时候上界还是固定的127。不过AutoBoxCacheMax参数在13的时候就已经存在了(具体出现的时间可能更早);在14之前,该参数只在HotSpot一侧的代码里有出现,没设置到Java一侧的java.lang.Integer里。
3 楼
ZangXT
2010-06-02
JLS指定的是【-128,127】之间的数。不知道这个可配置型是从哪个版本开始引入的,我从安装的jdk1.6.0_10来看,Integer的cache还是这样设置的:
jdk1.6.0_20(至少在博主提到的18版本的就改成可配置的了)
private static class IntegerCache { private IntegerCache(){} static final Integer cache[] = new Integer[-(-128) + 127 + 1]; static { for(int i = 0; i < cache.length; i++) cache[i] = new Integer(i - 128); } }
jdk1.6.0_20(至少在博主提到的18版本的就改成可配置的了)
private static class IntegerCache { static final int high; static final Integer cache[]; static { final int low = -128; [i] // high value may be configured by property[/i] int h = 127; if (integerCacheHighPropValue != null) { // Use Long.decode here to avoid invoking methods that // require Integer's autoboxing cache to be initialized int i = Long.decode(integerCacheHighPropValue).intValue(); i = Math.max(i, 127); // Maximum array size is Integer.MAX_VALUE h = Math.min(i, Integer.MAX_VALUE - -low); } high = h; cache = new Integer[(high - low) + 1]; int j = low; for(int k = 0; k < cache.length; k++) cache[k] = new Integer(j++); } private IntegerCache() {} }
2 楼
RednaxelaFX
2010-06-01
lwwin 写道
忽然想问问FX大做什么的工作,是和脚本技术相关的开发研究吗^^?
感觉找你肯定是找对了~
感觉找你肯定是找对了~
不,几乎完全无关。除了整合Groovy是工作的一部分外,没有跟脚本相关的工作内容。
1 楼
lwwin
2010-06-01
忽然想问问FX大做什么的工作,是和脚本技术相关的开发研究吗^^?
感觉找你肯定是找对了~
感觉找你肯定是找对了~
发表评论
-
The Prehistory of Java, HotSpot and Train
2014-06-02 08:18 0http://cs.gmu.edu/cne/itcore/vi ... -
MSJVM and Sun 1.0.x/1.1.x
2014-05-20 18:50 0当年的survey paper: http://www.sym ... -
Sun JDK1.4.2_28有TieredCompilation
2014-05-12 08:48 0原来以前Sun的JDK 1.4.2 update 28就已经有 ... -
IBM JVM notes (2014 ver)
2014-05-11 07:16 0Sovereign JIT http://publib.bou ... -
class data sharing by Apple
2014-03-28 05:17 0class data sharing is implement ... -
Java 8与静态工具类
2014-03-19 08:43 16316以前要在Java里实现所谓“静态工具类”(static uti ... -
Java 8的default method与method resolution
2014-03-19 02:23 10483先看看下面这个代码例子, interface IFoo { ... -
HotSpot Server VM与Server Class Machine
2014-02-18 13:21 0HotSpot VM历来有Client VM与Server V ... -
Java 8的lambda表达式在OpenJDK8中的实现
2014-02-04 12:08 0三月份JDK8就要发布首发了,现在JDK8 release c ... -
GC stack map与deopt stack map的异同
2014-01-08 09:56 0两者之间不并存在包含关系。它们有交集,但也各自有特别的地方。 ... -
HotSpot Server Compiler与data-flow analysis
2014-01-07 17:41 0http://en.wikipedia.org/wiki/Da ... -
字符串的一般封装方式的内存布局 (1): 元数据与字符串内容,整体还是分离?
2013-11-07 17:44 22420(Disclaimer:未经许可请 ... -
字符串的一般封装方式的内存布局
2013-11-01 12:55 0(Disclaimer:未经许可请 ... -
关于string,内存布局,C++ std::string,CoW
2013-10-30 20:45 0(Disclaimer:未经许可请 ... -
对C语义的for循环的基本代码生成模式
2013-10-19 23:12 21891之前有同学在做龙书(第二版)题目,做到8.4的练习,跟我对答案 ... -
Java的instanceof是如何实现的
2013-09-22 16:57 0Java语言规范,Java SE 7版 http://docs ... -
oop、klass、handle的关系
2013-07-30 17:34 0oopDesc及其子类的实例 oop : oopDesc* ... -
Nashorn各种笔记
2013-07-15 17:03 0http://bits.netbeans.org/netbea ... -
《深入理解Java虚拟机(第二版)》书评
2013-07-08 19:19 0值得推荐的中文Java虚拟机入门书 感谢作者赠与的样书,以下 ... -
豆列:从表到里学习JVM实现
2013-06-13 14:13 48425刚写了个学习JVM用的豆列跟大家分享。 豆列地址:http: ...
相关推荐
【标题】:“传真组件 FYI FYI.CO_”可能指的是一个与传真传输相关的软件或服务组件,FYI(For Your Information)通常用于提供信息或告知。这个标题暗示我们可能会讨论一个用于发送、接收或者管理传真的IT解决方案...
FYI显示屏程序V2.76FYI显示屏程序V2.76FYI显示屏程序V2.76FYI显示屏程序V2.76
根据给定文件的信息,我们可以看出这是一本关于个人与职业发展的指南书——《FYI For Your Improvement》,由Michael M. Lombardo 和 Robert W. Eichinger编写并版权所有。该书详细介绍了多种职业技能,并提供了相应...
FYI代码.txt
FYI.CO_ 进程 fxsevent.dll Version Windows
语言:English (UK) chrome&extension更新通知程序 ***此扩展名为EOL *** 使用... Rich桌面通知所需的Chrome 28+ 有关更多信息:http://goo.gl/hlnya gplv3代码 https://github.com/saltiresoul/fyi
《创新学原理及应用》(FYI).doc
fyi与g套件,slack,dropbox,box,Onedrive,Evernote和十几个 云应用程序。 特征: ✓在一个地方搜索和查找文档 ✓查看最近创建和更新的文档 ✓通过您使用的应用浏览文档 ✓支持每个应用连接多个帐户 ✓从浏览器...
这是XP系统的传真支持文件。这是XP系统的传真支持文件。这是XP系统的传真支持文件。这是XP系统的传真支持文件。
电脑发传真必须的组件 我打包发上来 包含fxssend FYI.CO_ generic urgent CONFDENT.CO_ fxscfgwz.dll fxsclntr.dll fxscount FXSCOUNT.H_ fxsext.ecf fxsperf fxsroute.dl
代码库。 该站点的代码以MIT许可的形式分发。 网站内容(例如论文和照片材料)是Jocelyn Badgley和其他贡献者的版权,并已获得知识共享许可,署名Attribution-NonCommercial-ShareAlike(请参阅 )。...
- **Flexbox布局**:提供更灵活的单轴布局解决方案,可以轻松调整元素顺序、大小和位置。 - **Grid布局**:为二维布局提供强大的工具,允许在行和列中精确定位元素。 3. **响应式设计** - **媒体查询**:利用`@...
mybrowser.fyi项目 嘿! :waving_hand: 感谢您的光临。 该存储库的设置是为了映射路线图并跟踪任何问题。 如果您要在此处记录问题,请。 如果您在这里查看路线图,则可以看到。
此扩展程序获取squirrel.fyi书签服务的页面信息 通过使用squirrel.fyi标记平台和chrome浏览器扩展程序,此扩展程序提供了一种跟踪与您相关的信息的简单方法。 有关更多信息,请查看squirrel.fyi!
使用此扩展名将链接添加到您的FYI智能列表或董事会。 FYI.to是一个微型网站构建器和人工内容管理工具,只需复制和粘贴链接即可使用。 您可以使用它来组织,共享和推广任何种类的内容。 在用户注册帐户后,该工具可...
Sunlight.FYI是一款浏览器扩展程序,其设计目的是在用户每次打开新标签页时,将页面背景替换为第二个夏令时期间的景象,以此鼓励人们减少对屏幕的依赖,多出去享受自然光。这款插件的独特之处在于它巧妙地将实用功能...