- 浏览: 3047752 次
- 性别:
- 来自: 海外
文章分类
- 全部博客 (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 22389(Disclaimer:未经许可请 ... -
字符串的一般封装方式的内存布局 (0): 拿在手上的是什么
2013-11-04 18:22 21489(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 ...
相关推荐
例如,如何设置节点的移动轨迹,选择合适的传播模型(如两维或三维自由空间模型、阴影衰落模型等),以及如何考虑节点的能量消耗和电池寿命。 文件列表中的"Opnet deliverables"可能包含了仿真项目的结果输出,比如...
相比传统的蓝牙技术,BLE在保持稳定连接的同时,显著降低了能源消耗,延长了设备的电池寿命。 文档首先会讲解蓝牙模块的硬件组成,包括射频(RF)部分、微控制器(MCU)、存储器以及电源管理单元等。这些组件协同工作,...
标题中的“Power and Thermal Management in this Intel Core Duo Processor”指的是英特尔酷睿双核处理器的电源与热管理技术。这是计算机硬件领域的一个重要话题,尤其是在设计高效能和低功耗的系统时。Intel Core ...
"wsn.rar_This Is How_inetwork_sensor" 提供的程序是为了演示无线传感器网络的工作原理。 无线传感器网络的核心组成部分包括: 1. **传感器节点(Sensor Nodes)**:每个节点通常包含微控制器、传感器、无线通信...
在"this is new approach for fuel cell control"这一描述中,我们可以理解为该压缩包文件提供了一种创新的燃料电池控制系统设计。 燃料电池控制是燃料电池系统中的关键部分,它确保燃料电池能够在各种运行条件下...
6. SSD的耐用性和寿命:由于闪存有限的擦写次数(P/E周期),SSD的寿命比HDD短。但现代SSD通过损耗均衡技术和其他手段延长了使用寿命。 7. 驱动器健康状态监控:SSD通常配备SMART(Self-Monitoring, Analysis, and ...
"This Is It" 可能是指这个项目或者研究方法的独特之处,即提出了一种新颖的燃料电池控制策略。在这个压缩包 "final_fuzzy_S.rar" 中,包含了名为 "final_fuzzy_S.mdl" 的文件,这很可能是用MATLAB编写的模糊逻辑...
标题 "This Program finds and displays the Drive’s Space" 暗示了这是一个计算机程序,它的主要功能是检测并显示计算机硬盘驱动器的可用空间信息。在IT领域,这属于系统管理和资源监控的一部分,对于用户理解存储...
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.
成果, this paper demonstrates the necessity, significance, and theoretical foundation of the topic.2.It delves into the concept of a full lifecycle construction project and the essence of project ...
- 考虑到不同动物的寿命,引导学生讨论并找出答案,如乌龟或某些鱼类。 5. **Which animal do you think has four legs when it was newly born, two legs when it is young and three legs when it’s getting old...
对于嵌入式设备来说,合适的电源管理,不仅可以延长电池的寿命,而且可以省电,延长设备运行时间,在提高用户体验方面有很大的好处。所以,各个soc厂家在这方面花了很多的功夫。下面,我们可以看看linux是如何处理...
Discuss the causes of this phenomenon.) 2. 解释为什么有些学生选择去国外留学(如:Many students choose to attend schools or universities outside their home countries. Why do some students study ...
总的来说,固态硬盘修复软件对于维护SSD的正常运行和延长其寿命具有重要作用。通过定期检查和适时的维护,用户可以有效地预防和解决可能出现的硬盘问题,保护重要数据的安全。在使用这类软件时,应遵循正确的操作...
标题“爱普生R270清零”指的是针对爱普生R270喷墨打印机的一项维护操作,主要是为了重置打印机内部的计数器,以解决由于墨盒计数...此外,定期的打印机维护,如适当的墨盒管理和打印头清洁,也是延长打印机寿命的关键。
打印机的计数器是用于跟踪打印页数和墨盒使用寿命的机制,当这些计数器达到一定程度,即使墨盒仍有墨水,打印机也会认为它们已耗尽并显示错误。 清零软件的工作原理是通过与打印机的固件交互,找到并修改存储计数器...
例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高工资管理的效率,也是科学化、正规化管理的重要条件。 设计目的 对于企、事业单位的工资发放来说,不需要太大型的...
7. **SSD的寿命与耐用性**:讲解写入次数限制(P/E周期)和总字节写入(TBW),以及如何监控和管理SSD的寿命。 8. **固件更新**:如何通过制造商的驱动程序和固件更新来增强SSD的稳定性和性能。 9. **数据安全**:...
This paper focuses on the multi-objective parameter optimization of a synchronizer in a transmission system using an improved particle swarm optimization (PSO) algorithm. The primary goal is to ...