- 浏览: 3016409 次
- 性别:
- 来自: 海外
文章分类
- 全部博客 (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分享的概要
NyaRuRuさん的blog真是一个宝库,有许多有启发性的日记。刚才读到这么一篇:this の寿命,虽然是06年的老文,却还是让我惊讶了一番。
文中提到,“this”在实际运行中并不一定在其作用域内都存活;在作用域结束前,它有可能就已经被回收(delete this)了。文中举了这样一个例子(稍微修改过):
testGC.cs:
运行的结果是:
从trace结果可以看到,Test的析构器在Test.Foo()还在运行中就执行了。这与一般认识似乎相差甚远:Main()里对Test.Foo()的调用尚未完成,也就是说应该还有对这个对象的引用,所以这个Test对象应该暂时还无法被析构才对。
事实上,受到JIT的内联优化等影响,程序运行的时候还有没有对某个对象的引用,与源码中不一定总是对应的;极端情况下,在一个对象的构造器执行过程中,这个对象就可能已经被析构了。在这帖有一串有趣的讨论。
Chris Brumme也写过一篇关于GC.KeepAlive()的帖子:Lifetime, GC.KeepAlive, handle recycling
文中提到,“this”在实际运行中并不一定在其作用域内都存活;在作用域结束前,它有可能就已经被回收(delete this)了。文中举了这样一个例子(稍微修改过):
testGC.cs:
// compile this file with the following command: // csc /o /d:TRACE testGC.cs using System; using System.Threading; using System.Diagnostics; class Test { IntPtr _myHandle = IntPtr.Zero; ~Test( ) { Trace.WriteLine( "Finalize; Release Handle" ); } public void Foo( ) { Trace.WriteLine( "Get Handle from OS : 123456" ); _myHandle = ( IntPtr ) 123456; Bar( _myHandle ); } public void Bar( IntPtr handle ) { GC.Collect( ); Thread.Sleep( 1000 ); Trace.WriteLine( "Use Handle : " + handle.ToString( ) ); } } static class Program { static void Main( string[ ] args ) { Trace.Listeners.Add( new ConsoleTraceListener( ) ); new Test( ).Foo( ); } }
运行的结果是:
引用
Get Handle from OS : 123456
Finalize; Release Handle
Use Handle : 123456
Finalize; Release Handle
Use Handle : 123456
从trace结果可以看到,Test的析构器在Test.Foo()还在运行中就执行了。这与一般认识似乎相差甚远:Main()里对Test.Foo()的调用尚未完成,也就是说应该还有对这个对象的引用,所以这个Test对象应该暂时还无法被析构才对。
事实上,受到JIT的内联优化等影响,程序运行的时候还有没有对某个对象的引用,与源码中不一定总是对应的;极端情况下,在一个对象的构造器执行过程中,这个对象就可能已经被析构了。在这帖有一串有趣的讨论。
Chris Brumme也写过一篇关于GC.KeepAlive()的帖子:Lifetime, GC.KeepAlive, handle recycling
评论
3 楼
hd700
2008-10-07
我也认为是jit的问题,我曾经写了一篇关于局部变量被回收的问题。http://blog.csdn.net/fuadam/archive/2008/09/03/2876002.aspx
2 楼
RednaxelaFX
2008-10-04
COM的话多半跟这个没什么关系……这个是JIT带来的问题,COM不使用JIT,GC也不是M&S而是RC的。
1 楼
lwwin
2008-10-04
COM里面似乎也会碰到……不知道是不是类似的?
memberfunc里面delete this…………
memberfunc里面delete this…………
发表评论
-
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 ... -
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 ... -
基于LLVM实现VM的JIT的一些痛点
2014-01-07 17:25 0同事Philip Reames Sanjoy Das http ... -
tailcall notes
2013-12-27 07:42 0http://blogs.msdn.com/b/clrcode ... -
《自制编程语言》的一些笔记
2013-11-24 00:20 0http://kmaebashi.com/programmer ... -
字符串的一般封装方式的内存布局 (1): 元数据与字符串内容,整体还是分离?
2013-11-07 17:44 22258(Disclaimer:未经许可请 ... -
字符串的一般封装方式的内存布局 (0): 拿在手上的是什么
2013-11-04 18:22 21372(Disclaimer:未经许可请 ... -
字符串的一般封装方式的内存布局
2013-11-01 12:55 0(Disclaimer:未经许可请 ... -
关于string,内存布局,C++ std::string,CoW
2013-10-30 20:45 0(Disclaimer:未经许可请 ... -
Java的instanceof是如何实现的
2013-09-22 16:57 0Java语言规范,Java SE 7版 http://docs ... -
也谈类型: 数据, 类型, 标签
2013-08-18 01:59 0numeric tower http://en.wikiped ... -
oop、klass、handle的关系
2013-07-30 17:34 0oopDesc及其子类的实例 oop : oopDesc* ... -
Nashorn各种笔记
2013-07-15 17:03 0http://bits.netbeans.org/netbea ...
相关推荐
This paper describes the measurement of carrier lifetime of GaAs/GaAlAs DH lasers. Simplified experimental system without high speed detecter and very broad band amplifier is used.
public class Student implements Serializable{// 对象的寿命通常随着生成该对象的程序的终止而终止。有时候,可能需要将对象的状态保存下来,在需要时再将对象恢复。我们把对象的这种能记录自己的状态以便将来再生...
对于嵌入式设备来说,合适的电源管理,不仅可以延长电池的寿命,而且可以省电,延长设备运行时间,在提高用户体验方面有很大的好处。所以,各个soc厂家在这方面花了很多的功夫。下面,我们可以看看linux是如何处理...
例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高工资管理的效率,也是科学化、正规化管理的重要条件。 设计目的 对于企、事业单位的工资发放来说,不需要太大型的...
对象也是一种在内存中存储的数据类型,他的寿命通常随着生成该对象的程序的终止而终止。有时候可能需要把对象的状态保存下来,需要时再将其回复。串行化是把每个对象转化为二进制字符串。 <?php class Person { ...
在生活中更好的维护了充电电池, 延长了它的使用寿命。 关键词:充电器;单片机;锂电池;MAX1898 Lithium Battery Charger Design Based On Single Chip Abstract Electronic technology's fast development causes...
实时应用程序这是一个 Android 应用程序,可以计算...you may not use this file except in compliance with the License.You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0Unless
基于单片机的液位测量装置具有测量准确、重复性好、功耗低、使用寿命长的特点, 是广泛采用的技术。在深入学习科学发展观的同时,电子设备的设计也需融入可持续发 展的设计理念。故此,在基于单片机的液位测量装置...
基于单片机的液位测量装置具有测量准确、重复性好、功耗低、使用寿命长的特点, 是广泛采用的技术。在深入学习科学发展观的同时,电子设备的设计也需融入可持续发 展的设计理念。故此,在基于单片机的液位测量装置...
Abstract: The automatic control that this lesson a pattern for is to breaking road machine experiment proceeds the design, choosing to use FX2N — 64MRa type PLC as the programmable preface controller...
< template> < Snarkdown> _this_ is **easy** to `use`. </ Snarkdown></ template>< script >import Snarkdown from '@swayable/vue-snarkdown'export default { components : { Snarkdown , } ,}</ ...
Let me make this clear: A bar chart is not analytics. 首先我们必须明白: 一张条形图不是数据分析. 5. Good skills of data analysis and reporting by computer. 熟练运用办公自动化进行数据分析和报告. 6. ...
无人机飞行产生的原始数据被转换成各种图形,以优化诸如电池电压和电池寿命之类的功能,从而最大程度地提高了Python无人机飞行的成功率。 目录 [关于此项目](#about-this-project) [内置](#内置) [设置](#...
由于用户希望小程序在一定的延迟内响应更改后的传感器值,而传感器通常电池电量有限,因此在正确的时间点读取传感器值对于IoT框架在最大程度地延长电池寿命的同时支持小程序的实时响应至关重要传感器。 但是,现有的...
关键字: MSP430F169单片机 E6A2-CWZ3C编码器 PID算法 H桥电机驱动 Abstract: this system by TI company MSP430F169 microcontroller as the control core of the whole system, the E6A2 - CWZ3C encoder as the ...
Furthermore, the radiative lifetimes of this five series are also calculated. The calculated values of energy levels and lifetimes are in good agreement with the experimental results.
Abstract:The unattended DC power supervise control system are introduced in this article,and the module of comprehensive monitoring、the module of battery inspection and the module of insulation ...
This System use jdk1.6.0_03 + sun_java_wireless_toolkit-2_5_2- + eclipse-SDK-3.0 + eclipseme.feature_1.7.7 this Develops platform to develop and test.Design software which used flow chart and so on, ...
An optical bandwidth analysis of a quantum-well (16 nm) transistor laser with ... No remarkable resonance peak, limiting factor in laser diodes, is observed during this modification in transistor laser
固体冷光源,环氧树脂封装,灯体内也没有松动的部分,不存在灯丝发光易烧、热沉积、光衰快等缺点,使用寿命可达5 万到10 万小时,比传统光源寿命长10 倍以上。 LED 利环保:LED 是一种绿色光源,环保效益更佳。...