Simple and Familiar
Secure- Java does not support operator overloading.
- Java does not support multiple inheritence
- Java does not use pointers.
- Java code does not support global variables.
Java programs run within the JVM and they are inaccessible to other java parts. This greatly improves the security. A java program rarely hangs due to this feature. It is quite unlike C/C++ program, which hangs frequently. Java's security model has three primary compenents:
- Class loader
- Bytecode verifier
- Security manager
Bytecode verifier verifies the bytecode as soon as class loader completes its work. It ensures that bytecode is valid java code. It almost eliminates the possibility of java program doing some malicious activity like accessing the memory outside the JVM.
The Security Manager controls many critical operations like file deletion, creation of threads etc. These operations are allowed only if the java program have sufficient permissions otherwise security manager does not allow the operations and generates Security Exception.
Platform Independent and Portable
Java programs are platform independent. They follow the paradigm write-once-run-anywhere.
A java program written for Windows platform can be run on any other platform (Unix, Linux, Solaris etc.) simply by copying the bytecode (".class" files). You do not have to copy the source code and compile it again as in case of a C/C++ program. This feature has made the java a powerful language. You can run bytecode on any machine provided that the Java Virtual Machine. Java Virtual Machine itself is platform dependent. It is actually the jvm, which converts the bytecode into the machine code and execute them.
So we can say that Java is a portable language. one more feature which makes Java highly portable, is that Primitive data types are of fixed length irrespective of the Platform. for example an int will be always of 4 bytes in Java. This is unlike C/C++ where size of int can be 2 bytes on some machines and 4 bytes on other machines.
Object Oriented
Java is almost pure object oriented language but it supports primitive data types like byte, short, int, long, float, double, char, boolean for the performance reasons.
Memory Management and Garbage Collection
Memory allocation for the Java objects is completely dynamic but Java does not have support for pointer arithmetic like C/C++, which simplifies the things. Moreover you do not have to worry about freeing the memory while writing java programs. Whenever you run a java program, JVM also run another java program (thread to be more precise) called Garbage Collector in the background. Garbage collector keeps check on the java objects. Whenever a java object is not being used it is garbage collected by the Garbage Collector i.e. the memory allocated for the object is added to the pool/heap of free memory and can be reused. This simplifies the task of the programmer to a large extent. This also eliminates lots of bugs caused due to improper use of pointer and memory management features like freeing memory explicitly.
Multi-threaded
Java was designed to meet the real world requirement of creating interactive, networked programs. Java provides support for writing multi threaded programs to achieve this. This allows the programmer to write programs that can do many thins concurrently. For example a GUI based application might be listening to user events and taking appropriate action, a separate thread might be doing printing and a separate thread might be downloading a file from some machine across the network, all of this being concurrently. This results in better performance and better CPU utilization.
It is possible to write multi-threaded programs in other language also but it is achieved only by making use of System calls while in case of java it can be achieved by using features of the language itself.
Rich API (Application Programmer's interface) / Class Library
Java API is very rich as compared to other languages specially when it comes to Network Programming.
Robust
Most programs fail for one of the two reasons:
- Memory Management
- Exceptional conditions at run time
In Java memory allocation and de-allocation is handled in language itself, which eliminates many problems caused due to dynamic memory management features in C/C++. Java also supports object oriented exceptional handling features to handle exceptional conditions, which occur at run time. This allows a java program to recover and continue execution event after an exceptional condition occurs.
Distributed
Java is designed for the distributed environment of the Internet. Java has built in support for various TCP/IP based protocols for this purpose. In fact, accessing a resource using a URL is similar to accessing a file on the local machine. Java also has features for Remote Method Invocation, which is somewhat similar to Remote Procedure Calls (RPC), This allows objects on different computers to execute procedures remotely. Java has built in API's for this purpose called RMI, Which stands for Remote Method Invocation.
Dynamic
Every java class is a separate unit of execution. A class is loaded at the run time only when it is needed. This is normally allows us to update a class without modifying the code using it. Default mechanism for binding methods in Java is also dynamic (run time binding).
No comments:
Post a Comment