Design Goal:
Java: Rapid development, security and portabily
C++: More concern with performacne and backward compatibility

Java: Relatively slow because it compiled to byte-code and run on top of the VM
C++: Faster, it compiled to native machine code

Memory management:
Java: Garbage collection, that collect unuse memory periodically
C++: Programmer conttrolled memory management, pointer, and a preprocessor for full backward compatibility with C

Parameter passing:
Java: passing by reference
C+: passing by value

Java: All method are virtual, meainng the implementation of a method is selected according to the type of the object
C++: methods must be explicitly declared virtual.