• Post Reply Bookmark Topic Watch Topic
  • New Topic

about native  RSS feed

 
Santhi Bharath
Ranch Hand
Posts: 75
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
folks,

i have a doubt about native methods.how and when native methods are implemented.

how and when the JVM will implement these native methods?there are lot of native methods in the API like

Runtime.getRuntime().gc(); new Object().hashcode();

if you call Runtime.gc().from where this gc() method will be called??
 
Ernest Friedman-Hill
author and iconoclast
Sheriff
Posts: 24217
38
Chrome Eclipse IDE Mac OS X
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
"native" means that the body of the method is not written in Java, but rather in a "native" language like C/C++. The mechanism through which you would do this (and yes, you can do this yourself in your own classes) is called the Java Native Interface, or "JNI". You can learn about JNI here.

Many methods in core classes like Object, Runtime, and Thread are native because these classes provide some "magic" that can't be implemented in Java itself. For example, methods like wait() and notify() in Object can only be implemented by using operating-system calls to the platform's thread library.
 
Santhi Bharath
Ranch Hand
Posts: 75
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
thank you for your quick response.

now i am a little bit clear.but,who will implement these native methods?

i have just installed the j2se1.5.0_15 and now if i call something like this

System.out.println(objectname_of_myclass);

it should automatically call toString() of Object class as i haven't implemented toString() in my class.

but in source, the toString() method of Object class contains something like this

"
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
"

here toString itself is calling hashCode(); of Object class which is a native method. then,who has implemented this hashCode() method and where it is implemented ? is that JVM?
 
Campbell Ritchie
Marshal
Posts: 56570
172
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
You have got a toString() method implemented in your class; it is inherited from the Object class, which you obviously know about. You mean you haven't overridden a toString() method.
The hashCode method is implemented somewhere inside the JVM; I am not sure where. It was implemented by whoever wrote that part of the JVM, which means different people for different implementations of the JVM.

And EF-H has told you already where you can learn to write your own native methods.
 
Henry Wong
author
Sheriff
Posts: 23295
125
C++ Chrome Eclipse IDE Firefox Browser Java jQuery Linux VI Editor Windows
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
here toString itself is calling hashCode(); of Object class which is a native method. then,who has implemented this hashCode() method and where it is implemented ? is that JVM?


I guess the "who" is the developers of the JVM. And depending on the platform, it is implemented in a shared object, or a DLL. If you really want to understand the plumbing, you should read the JNI that EFH recommended. But to try to answer your question in summary....

There is a method provided by the JVM to load a shared object (or DLL), and in general, classes use this method to load the libraries in the static initializer of the class (but it doesn't have to).

When you call a native method, Java knows that it is a share object method call, and sets up the call stack for it -- and then locates and calls the native method in the shared object.

Henry
 
Santhi Bharath
Ranch Hand
Posts: 75
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
thank you very much guys for your replies. now, i have understood about native methods.

so, now i can conclude that native methods mechanism is one of the things which makes java as platform independent?is it or not?
 
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
Boost this thread!