What is Access RAM in PIC18 series and how is it exactly used?
RAM addresses on a PIC 18 are 12 bits wide.  That is too much to include in single-word instructions, which are only 16 bits wide.  To use less address bits in instructions than the memory actually has, the PIC 18 uses a segmented architecture.  This means RAM is divided into segments which the PIC documentation calls banks.  Each bank holds 256 bytes.  A full memory holds 4096 bytes, so there are 16 banks.  The 8 bit address offset within a bank is specified in instructions and the 4 bit bank number is specified with state that can be set at run time, which is called the BSR register.

To allow for more efficient access to a selected portion of this 4096-byte or 16-bank memory, instructions actually contain one more address bit.  This bank selects between one of two banks, the bank identified by BSR and the access bank, which is a fixed set of 256 bytes defined for that PIC.  The 256 bytes of the access bank is split between some of the special function registers at the end of bank 15 and some general RAM at the start of bank 0.  Where this split is, meaning how many bytes of the access bank are in bank 0 and how many in bank 15 varies between models in the PIC 18 family.

The purpose of the access bank in general is for fast access to any of the selected 256 locations independent of the current BSR setting.  Certain core registers are always in the access bank part in bank 15, like STATUS, PRODH, PRODL, etc.  The advantages of this should be obvious, in that code is not needed to set BSR, and that accessing these registers can preserve BSR.

The advantage in general RAM is similar.  Application code can access variables in that part of the access bank without the overhead of having to set the current bank, which again therefore also doesn't corrupt the current bank setting.  Since the amount of access memory available for registers is limited, you have to consider carefully what you want to place there and what is better placed in banked memory so that something else can benefit from the fast access of the access bank.  For example, the access bank is generally inappropriate for large buffers.  A single buffer could easily be larger than the general RAM part of the access bank, and it is likely addressed indirectly thru the FSR registers anyway.  These contain the full 12 bit address so banking doesn't apply to indirect references.

In general, keep the often-used individual and genarally global variables in the access bank.  There is a lot of room if you're using it only one byte at a time.  In my system, by default, I use the first 16 bytes as general registers that are used frequently as local scratch and for passing parameters into and out of subroutine.  These get banged around a lot, so they benefit from the easy access.  After that, I usually put individual global variables in the access bank and the private local state of each module wholly in one bank when this is possible and reasonable.  That means code in any one module only needs to access data in one bank and the few global variables in the access bank.

Of course those are just general guidlines.  Every project is different and you have to think about what makes sense.

To allocate memory in the access bank in assembler, you use the UDATA_ACS directive instead of just UDATA for banked memory.  I think the compiler has a similar sounding mechanism.  See the compiler manual for details.