First up, I'm not into Java so this is generic type info.
A stack in computing terms is a temporary storage area which is generally used for one or more of - saving caller's address when entering a subroutine or interrupt service routine, area to put parameters for a service, area to save/restore CPU registers.
A system might have anything from one stack for the entire machine to 1-2 stacks for the system and one or more per running task.
In the modern day, it's generally a case of there being quite a lot of them.
Stacks can be FIFO (First In, First Out) or LIFO (Last In, First Out). The more common type is LIFO - also FIFO might at times be referred to as a "ring buffer".
Entering information onto a stack is usually called a "push", getting it back is "pull".
In the sense of Java, my guestimation would be - a stack is for push/pull of parameters. Call stack is for register save/call address. This might be well out so it's worth looking up.
Stack Frame - in the sense of programming and CPUs, stack entries will usually have multiple standard types. So a stack frame is simply a set of data that has been put on the stack.
e.g. a stack frame might simply contain a return address, or it might contain a return address and a bunch of saved registers.
Also, in higher level languages a stack will usually be used to retain information for active loops and subroutines. e.g. for loops, an entry might contain exit test condition and address of the start of the loop, for sub might contain address which called the sub.
Edited by Rybags, 08 March 2015 - 10:52 AM.