Release Notes Mono 3.2

Mono 3.2 is a portable and open source implementation of the .NET framework for Unix, Windows, MacOS and other operating systems.

Mono 3.2 is an update to Mono 3.0 based on the master branch of github, it is not a minor upgrade to 3.0. Mono 3.2 was released on July 24th, 2013.

Support for Mono versions 3.0 and 2.10 is been discontinued. No further development of bug fixing is planned for those branches.

New in Mono 3.2.0

Major Highlights

Runtime

LLVM updated to version 3.2, this brings better optimizations for mono.

Garbage Collector

Mono now defaults to the SGen Garbage Collector.

A lot of work went into making this the best performing and most stable release of our collector.

As part of making it broadly usable, two problematic workloads were addressed and make much faster.

One is the popular object workload, where a few pinned nursery objects are very popular with old generation objects, causing a lot of remembered sets to be created. To avoid that, popular objects are made immortal until the next major collection.

The other is the massive thread stacks workload, where a lot of threads with big stacks need to be conservatively scanned. This used to put a lot of pressure on the pinning stage since it would produce very big pin queues. To avoid that, we employ hash filtering on pin queues and that dramatically reduce their average size and we pin major blocks instead of individual objects.

In addition to that, we switched to lazy sweeping by default, which reduces major collection pause times and improves aggregate throughput.

Three new experimental modes for the garbage collection are now available.

Low pause mode

Under the low pause mode, SGen will execute major collections concurrently to your application and only briefly pause to finish it. To enable it pass major=marksweep-conc in the MONO_GC_PARAM environment variable.

Low promotion nursery

The low promotion nursery employs aging to reduce temporal effects on object promotion and reduce the pressure on the major heap. To enable it pass minor=split in the MONO_GC_PARAM environment variable.

Mostly precise stack scanning

Now it’s possible to enable mostly precise stack scanning, that can speed up collections by reducing the volume of conservative scanning needed. This reduces pinning, leading to shorter minor collection pause times and increased space usage of the nursery.

Mobile

Mono 3.2 Basic Class Libraries now can fully build Xamarin’s mobile profile.

Size Reduction

Multiple features can now be disabled for the classlibs to reduce the footprint on mobile devices. FullAOT targets now enjoy much better fallbacks and much more linker friendly code.

Performance

The FullAOT compiler can now generate much faster code for icalls and has support for generic valuetype sharing, ending issues with missing methods at runtime once and for all.

Optimizations

Performance of primitive parsing was greatly enhanced.

LINQ is now much faster with arrays.

Large object cloning and boxing is up to two times faster.

Optimize Marshal.Read/Write methods to avoid a trip to unmanaged when possible.

Other platforms

Google contributed ports of NaCl for ARM and Amd64. SGen now works on FreeBSD.

Installing Mono 3.2

Binary Packages and Source Code Downloads:

Source code and pre-compiled packages for Linux, Solaris,
MacOS X and Windows are available from our web site from
the Downloads section.

Quick source code installation:

If we have no packages for your platform, installing from
source code is very simple.

Compile libgdiplus to support System.Drawing:

    $ tar xjvf libgdiplus-3.0.tar.bz2
    $ cd libgdiplus-3.0
    $ ./configure
    $ make
    $ make install

Then compile Mono itself:

    $ tar xjvf mono-3.2.0.tar.bz2
    $ cd mono-3.2.0
    $ ./configure
    $ make
    $ make install