Sometimes when you have too much contention on the library, you should check the objects that are most pinned in the library cache and mark it as hot using dbms_shared_pool.markhot() procedure that creates multiple copies of the same object in the shared in order to minimize contention on theses objects.
the following query will help get these objects :
FROM ( SELECT CASE
WHEN (kglhdadr = kglhdpar) THEN 'Parent'
ELSE 'Child ' || kglobt09
SUBSTR (kglnaobj, 1, 20) NAME,
FROM x$kglob -- where kglobtyd != 'CURSOR'
ORDER BY kglobt24 DESC)
WHERE ROWNUM <= 30;