Hi Raveesh
Your question has multiple answers, but depends on context.
You know the basic difference between FREE and CLEAR, but the distinction lies on the utility it has to the programmer when taking "architecture-level" decisions.
Let me describe two different scenarios.
CASE 1) The amount of records being read from the database are relatively large, but not exceedingly so, and you are going to be filling and clearing internal tables often while doing your processing.
In this case, CLEAR is a better option, because the hardware has only spent CPU cycles to assign memory. Clearing it just makes its value = empty. At the end of the processing block (be it a method, endform, function or program) that memory will be de-assigned automatically along with everything else that was locally declared so it's not that bad in terms of CPU cycles used.
CASE 2) You are facing some serious data volume, and require multiple steps to accomplish the processing block, even more so, you are faced against the wall of memory capacity of a single processing unit (the amount of RAM space the SAP system can assign to a single user/batch process), as programmers we often try to make those kind of tasks as efficient as possible in terms of execution time, but we also need to be careful not to overflow the memory of the running process
On these cases FREE is a better option because it allows you to manage assigned memory better, however using it too much means wasted CPU cycles in clearing the memory assigned, so you need to be very careful when to use it.
Hope that helps.