- 浏览: 910944 次
- 性别:
- 来自: 北京
-
文章分类
- 全部博客 (322)
- Hibernate研究&源码 (27)
- Server (10)
- Coder碎语 (64)
- EnglishMulling (11)
- About XML (1)
- persistence (12)
- Core Java & OO (23)
- Java EE (6)
- JavaScript/JSON/Ajax/ext... (22)
- 我的读书笔记 (16)
- Source Codes Study (29)
- workFlow/jBPM (22)
- OFBiz: Open For Business (1)
- 项目积累 (21)
- srcStudy_acegi (1)
- Cache/Ehcache... (9)
- Java Test/JUnit.. (7)
- maven/ant (2)
- 设计模式 (1)
- SOA/cxf/ws-security (2)
- Android (4)
- 云计算/Hadoop (2)
- 加密/签名 (1)
- 正则表达式 (1)
- htmlparser (1)
- 操作系统 (5)
- DB (1)
最新评论
-
天使建站:
这里这篇文章更详细 还有完整的实例演示:js跳出循环 ...
jQuery中each的break和continue -
heshifk:
刚刚我也遇到同样的问题,然后就在纠结为什么不能直接使用brea ...
jQuery中each的break和continue -
masuweng:
不错写的.
集万千宠爱于一身的SessionImpl:get研究(四): Hibernate源码研究碎得(8) -
muzi131313:
这个老是忘,做一下笔记还是挺好的
jQuery中each的break和continue -
lg068:
data = data.replace("\n&qu ...
项目小经验: eval与回车符
好像是在听一人讲JVM性能调优方面事时, 知道了尽量减少JVM创建对象,因为那样会消耗不少资源. 有了这样的mindset后,自己编码也就尽可能地少创建对象了.
但看jBPM时,发现每一个请求都要创建一个JbpmContext对象,纳闷的同时也反思先前的那个mindset的正确性,或者说在什么条件下是正确的.
想到一个例子: Hibernate从数据库取出数据后,都是要以对象的形式来封装的, 那样的每次DB操作至少要创建一个对象的. 这样一想,JbpmContext的创建相比于Hibernate操作DB时对象的创建就可以忽略了.
做个暴力实验来看下, 创建新对象时JVM的耗时:
实验用的代码很简单, 如下所示:
for(int i=0;i< 10000;i++) { new Object(); }
实验结果如下:
循环次数(也就是创建Object实例的次数) 耗时(毫秒)
1000000000 22094
100000000 2282
10000000 219
1000000 31
100000 0
10000 0
现在用的机器配置: Pentium(R) 4 CPU 2.40GHz, 1G内存, 操作系统是 Windows XP(2002版本), SP3.
从上面的结果看出: 只有在100万次时才有明显的耗时,而这时的耗时也才只31毫秒,而我做实验的机子很破的. 这样在真正的项目中,也就不必多考虑新建一个对象时的耗时了.
这里只是做了个耗时的实验, 这个耗时背后又倒底做了些什么? 又有哪些是耗时的主犯呢? 抛砖引玉, 期待大家的讨论.
评论
Typically, object allocation is very cheap!
● 10 native instructions in the fast common case
● No remembered set overhead on new objects
● C/C++ has faster allocation? Not!
● Reclamation of new objects is very cheap too!
● Young GCs in generational systems
● So
● Do not be afraid to allocate small objects for
intermediate results
● GCs love small, immutable objects
● Generational GCs love small, short-lived objects
用Object对象测估计说明不了多大问题。
[url]
http://developers.sun.com/learning/javaoneonline/2007/pdf/TS-2906.pdf
[/url]
但是在flash的VM中创建对象的开销貌似是挺大的
我曾经写过一个AIR的本地播放器类似这种
http://222.243.146.200/html/anime/20090402/25579.html
结果是把所有评论在加载时全部创建为控件对象
比加载时存为字符串在播放时动态创建与释放控件(在同一时间需要创建的弹幕数量比教大时)要流畅得多
当然这里的控件的创建开销不是一个object能比的
跟随楼主,测试这样一段代码:
public class TestObjectCreation { private static void foo() { final int MAX = 10000000; for (int i = 0; i < MAX; ++i) { new Object(); } } public static void main(String[] args) { foo(); } }
查看JIT出来的结果,感觉挺意外的。foo()方法基本上没被优化,i放在了EBX里,每个循环规规矩矩的递增;循环体内的new Object()也规规矩矩的每次都被调用。我原本来以为在方法足够热的时候,Hotspot能把这个新建对象的动作优化掉的。看来要么是这个方法还不够热,要么是……我也不清楚,没读过那部分源码。
发表评论
-
Java实现将源文件中的注释替换成空行。
2011-12-27 15:39 2757以Css文件为例, 为了能准确地定位,需要把段注释也要替换 ... -
JVM内存溢出问题分析排查
2011-10-25 10:27 3712内存溢出与数据库锁表的问题,可以 ... -
ant运行java程序时, 它不能加载指定properties文件, 怎么处理?
2011-07-27 17:47 3686运行时, 目录结构如下: . ... -
关于用多线程时任务分配与结果收集的问题的设计讨论
2011-07-27 10:47 2042假定任务是这样的: 对于给定字符串,如“threadTe ... -
File类createNewFile时的一个注意点
2010-11-03 17:42 26506今天体会到一个陷阱,刚开始还觉得是JDK的bug呢 ... -
要static还是不要static?
2010-09-25 14:18 1171内部接口声明加不加static没什么不同 附件Inn ... -
线程join方法的理解
2010-08-22 11:11 2401一个偶然机会,又接 ... -
should effort go into reuse above maintainability and extensibility?
2010-06-04 09:37 1271Master and Student Maste ... -
对接口编程的一些思考
2009-04-10 08:41 1225对一个问题的持续深追,又想起了Java中接口编 ... -
序列化(二): 为什么要序列化?
2009-03-20 08:25 1910在readResolve()方法与序列化中, 由r ... -
序列化(一): readResolve()方法与序列化
2009-03-17 10:08 3080在CJC(一) 中提到一个问题,即 readResolve方 ... -
Core Java: 继承覆盖时的一个问题
2009-02-23 21:01 1240看如下Java代码: public class Main { ... -
CoreJava: 父子类都需要实现同一个接口?
2009-02-18 16:16 2427前些写用LinkedHashSet带来的思考(http ... -
Spring中配置Qaurtz时的singlton问题
2008-11-23 17:24 1522上一篇中用TimerTask做了个简单的实验, ... -
试下Spring的scheduledTask: 不应该出问题的问题
2008-11-21 20:39 3064要用Spring的scheduledTask了 ... -
在Java里不用Socket而直接操作远程计算机里的文件.
2008-06-25 18:27 2770今天上班时偶然发现在Java里可以在不用Socket情况下操作 ... -
about @SuppressWarnings.
2008-06-24 13:50 7637about @SuppressWarnings. ... -
<Java.JavaEE面试整理>(10) --"标签"接口,重载vs覆盖........
2008-04-04 15:46 2147Q 13: Java中为什么有些接口里并没有定义任何方法? L ... -
java.sql.Timestamp转为相应字符串的问题及解答
2008-04-01 14:28 2852工作中用到了java.sql.Timestamp这个类,先不说 ... -
"异常"的梦
2008-03-24 08:33 1291"不对呀,电子地图上 ...
相关推荐
Java对象跟JVM讲解,Java对象跟JVM讲解,Java对象跟JVM讲解,Java对象跟JVM讲解,Java对象跟JVM讲解,Java对象跟JVM讲解,
java对象在jvm中的存储情况 jvm
在Java中我们有几种方式可以创建一个新的对象呢?总共有以下几种方式: new关键字 反射 clone 反序列化 Unsafe.allocateInstance 为了便于说明和理解,下文仅针对new出来的对象进行讨论。
一个jvm启动多个springboot服务
关于JVM中对象的生命周期的讲解,不错!!
如果 Java 堆中的内存并不规整,已使用的内存和空闲内存相互交错,Jvm 就需要维护一个列表,记录上哪些内存块中可用的。在分配的时候,从列表中找到一块足够大的空间分配给对象实例,并且更新到列表上的记录。 解决...
Jvm垃圾回收机制 by linux_14胡嘉辉1.如何确定某个对象是“垃圾”? 2.典型的垃圾收集算法3.典型的垃圾收集器
java性能调优-jvm创建对象和-performance-createobj-allocationmemory
R大(国内JVM权威)资料合集R大(国内JVM权威)资料合集R大(国内JVM权威)资料合集R大(国内JVM权威)资料合集R大(国内JVM权威)资料合集R大(国内JVM权威)资料合集
当前,以Hadoop、Spark为...这些大数据处理框架采用分布式架构,使用Java、Scala等面向对象语言编写,在集群节点上以Java虚拟机(JVM)为运行时环境执行计算任务,因此依赖JVM的自动内存管理机制来分配和回收数据对象.
- 如何判断一个不再使用的类? - JVM 分代收集理论有哪些? - 聊一聊 JVM 中的垃圾回收算法? - 标记-清除算法 - 标记-复制算法 - 标记-整理算法 - 什么是记忆集,什么是卡表?记忆集和卡表有什么关系? - ...
JVM面试资料。 JVM结构:类加载器,执行引擎,本地方法接口,本地内存结构; 四大垃圾回收算法:复制算法、标记-清除算法、标记-整理算法、分代收集算法 七大垃圾回收器:Serial、Serial Old、ParNew、CMS、Parallel...
jvm源码
上图红色的这3个箭头,对于通过new产生一个字符串(”宜春”)时,会先去常量池中查找是否已经有了”宜春”对象,如果没有则在常量池中创建一个此字符串对象,然后堆中再创建一个常量池中此”宜春”对象的拷贝对象。...
jvm 配置jvm参数 配置jvm参数
介绍了heap dump和thread dump,以及详细介绍dump工具Memory Analyzer的使用,最后讲解了Java对象的内存布局。
每个方法都对应一个栈桢,栈桢包含了方法的局部变量、操作数栈、方法返回地址等信息。在Java程序执行过程中,JVM会根据方法的调用关系创建和销毁栈桢。 二、栈桢的结构 栈桢的结构可以分为以下几个部分: * 局部...
一个jvm的学习资料,对新手很有帮助,建议收藏
jvm源码,jvm-native的源码,jvm支行机制,可对jvm的运行过程进行分析 个人网站:https://www.zhangjunbk.com
我们都知道Java和C++有一个非常大的区别就是Java有自动的垃圾回收机制,经过半个多世纪的发展,Java已经进入了“自动化”时代,让使用者只需要注重业务逻辑的开发而不需要担心内存的使用情况。那么我们为什么...