Tag: clr

Java和.Net之间的JIT有什么不同

我知道Microsoft .NET使用CLR作为JIT编译器,而Java具有Hotspot。 它们之间有什么区别?

Java vs .NET性能

在我编写这个小代码来比较我的计算机中的.NET 4.5和Java 8性能后,我非常惊讶: class ArrayTest { public int[][] jagged; public ArrayTest(int width, int height) { Height = height; Width = width; Random rng = new Random(); jagged = new int[width][]; for (int i = 0; i < height; i++) { jagged[i] = new int[width]; for (int j = 0; j < jagged[i][j]; j++) { jagged[i][j] […]

垃圾收集和线程

AFAIK当GC正在执行其操作时,VM会阻止所有正在运行的线程 – 或者至少在压缩堆时。 这是CLR和JVM (生产版本截至2010年1月)的现代实现中的情况吗? 请不要提供有关GC的基本链接,因为我了解基本的工作原理。 我假设全局锁定就是这种情况,因为当压缩发生时,引用在移动期间可能是无效的,并且最简单的方法就是锁定整个堆(即,通过阻塞所有线程来间接锁定)。 我可以想象更强大的机制,但KISS经常占上风。 如果我不正确,我的问题将通过对用于最小化阻塞的策略的简单解释来回答。 如果我的假设是正确的,请提供以下两个问题的一些见解: 如果这确实是这种行为,那么像JBOSS和Glassfish这样的重量级企业引擎如何保持一致的高TPS率? 我在JBOSS上做了一些谷歌搜索,我期待在APACHE上找到适合网络处理的内存分配器。 面对NUMA式架构(可能在不久的将来),这听起来像是一场灾难,除非进程受到线程和内存分配的CPU限制。

内存中的方法表示是什么?

在思考Java / C#中的编程时,我想知道如何在内存中表示属于对象的方法,以及这个事实如何涉及multithreading。 是一个单独为内存中的每个对象实例化的方法,还是同一类型的所有对象共享该方法的一个实例? 如果是后者,执行线程如何知道要使用哪个对象的属性? 是否可以在C#中使用reflection修改方法的代码,并且只能修改同一类型的多个对象中的一个对象? 一个不使用类属性的静态方法总是线程安全吗? 我试着对这些问题下定决心,但我对他们的答案非常不确定。