锁定老帖子 主题:Java内存管理
精华帖 (0) :: 良好帖 (0) :: 新手帖 (3) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2011-07-16
最后修改:2011-07-16
看了Iteye之前一些牛人写的有关Java虚拟机或者内存管理的一些文章,发现讲的都头头是道,但是就是有一个问题,那就是菜鸟们(比如我)想知道的是具体的例子它是怎么工作的,而不是一大推笼统的概念或者背书教程。
比如下面这个类,当JVM类加载器把它的.class文件加载到内存后,JVM做了什么?既是JVM各部分(方法区、栈、堆等)都存了这个类的哪部分信息?这个类的详细执行过程又是怎样的(各区存储的信息如何通讯)?希望高手们都出来讨论下。
package com.lgj.main; public class MyGreeting { private String greeting; private String myName; private int myAge; public String myGreeting() { return this.getMyName() + this.getMyAge() + this.getGreeting(); } public static void main(String[] args) { MyGreeting myGreeting = new MyGreeting(); myGreeting.setMyName("Q"); myGreeting.setMyAge(23); myGreeting.setGreeting("Hello,world!"); System.out.println("Name: " + myGreeting.getMyName()); System.out.println("Age: " + myGreeting.getMyAge()); System.out.println("Greeting: " + myGreeting.getGreeting()); } public String getGreeting() { return greeting; } public void setGreeting(String greeting) { this.greeting = greeting; } public String getMyName() { return myName; } public void setMyName(String myName) { this.myName = myName; } public int getMyAge() { return myAge; } public void setMyAge(int myAge) { this.myAge = myAge; } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-07-16
同样菜鸟尝试解释下...求下面正确拍砖
首先主方法启动了一个线程,MyGreeting类信息及其字段信息方法信息都存放在了方法区(永久区)中 在这个线程里面有一个栈与其对应 变量myGreeting放在栈中..new出来的对象放在了“唯一”的堆中 接下来你通过myGreeting这个引用为其指向的对象赋值,在赋值之前的三个变量放在栈中,赋值之后由于是类变量,所以放在堆中。 System 应该先去方法区(永久区)将其加载,随后调用其方法把结果显示在控制台上,过程与上面大同小异.. 欢迎真正懂的给出更详细讲解或者拍砖指点,代表菜鸟们感激! |
|
返回顶楼 | |
发表时间:2011-07-17
程序新手 写道
同样菜鸟尝试解释下...求下面正确拍砖
首先主方法启动了一个线程,MyGreeting类信息及其字段信息方法信息都存放在了方法区(永久区)中 在这个线程里面有一个栈与其对应 变量myGreeting放在栈中..new出来的对象放在了“唯一”的堆中 接下来你通过myGreeting这个引用为其指向的对象赋值,在赋值之前的三个变量放在栈中,赋值之后由于是类变量,所以放在堆中。 System 应该先去方法区(永久区)将其加载,随后调用其方法把结果显示在控制台上,过程与上面大同小异.. 欢迎真正懂的给出更详细讲解或者拍砖指点,代表菜鸟们感激!
String是对象类型,所以赋值后会保存到堆中,但int是基本类型,赋值后应该保存在栈中吧。 |
|
返回顶楼 | |
发表时间:2011-07-17
不知是大家不屑,还是不会?期望牛人出来说个详细的。
|
|
返回顶楼 | |
发表时间:2011-07-17
同为新人,JAVA虚拟机原理书里讲得算是比较清晰的,不过我基础差,看得一知半解的
|
|
返回顶楼 | |
发表时间:2011-07-17
牛人写的有关Java虚拟机或者内存管理的一些文章
LZ 麻烦你能不能给个链接啊?谢谢 |
|
返回顶楼 | |
发表时间:2011-07-17
你需要的是学习一些专用工具。。。。
比如 javah c:\Program Files\Java\jdk1.6.0_11\bin\appletviewer.exe c:\Program Files\Java\jdk1.6.0_11\bin\apt.exe c:\Program Files\Java\jdk1.6.0_11\bin\extcheck.exe c:\Program Files\Java\jdk1.6.0_11\bin\HtmlConverter.exe c:\Program Files\Java\jdk1.6.0_11\bin\idlj.exe c:\Program Files\Java\jdk1.6.0_11\bin\jar.exe c:\Program Files\Java\jdk1.6.0_11\bin\jarsigner.exe c:\Program Files\Java\jdk1.6.0_11\bin\java.exe c:\Program Files\Java\jdk1.6.0_11\bin\java-rmi.exe c:\Program Files\Java\jdk1.6.0_11\bin\javac.exe c:\Program Files\Java\jdk1.6.0_11\bin\javadoc.exe c:\Program Files\Java\jdk1.6.0_11\bin\javah.exe c:\Program Files\Java\jdk1.6.0_11\bin\javap.exe c:\Program Files\Java\jdk1.6.0_11\bin\javaw.exe c:\Program Files\Java\jdk1.6.0_11\bin\javaws.exe c:\Program Files\Java\jdk1.6.0_11\bin\jconsole.exe c:\Program Files\Java\jdk1.6.0_11\bin\jdb.exe c:\Program Files\Java\jdk1.6.0_11\bin\jhat.exe c:\Program Files\Java\jdk1.6.0_11\bin\jinfo.exe c:\Program Files\Java\jdk1.6.0_11\bin\jmap.exe c:\Program Files\Java\jdk1.6.0_11\bin\jps.exe c:\Program Files\Java\jdk1.6.0_11\bin\jrunscript.exe c:\Program Files\Java\jdk1.6.0_11\bin\jstack.exe c:\Program Files\Java\jdk1.6.0_11\bin\jstat.exe c:\Program Files\Java\jdk1.6.0_11\bin\jstatd.exe c:\Program Files\Java\jdk1.6.0_11\bin\jvisualvm.exe c:\Program Files\Java\jdk1.6.0_11\bin\keytool.exe c:\Program Files\Java\jdk1.6.0_11\bin\kinit.exe c:\Program Files\Java\jdk1.6.0_11\bin\klist.exe c:\Program Files\Java\jdk1.6.0_11\bin\ktab.exe c:\Program Files\Java\jdk1.6.0_11\bin\native2ascii.exe c:\Program Files\Java\jdk1.6.0_11\bin\orbd.exe c:\Program Files\Java\jdk1.6.0_11\bin\pack200.exe c:\Program Files\Java\jdk1.6.0_11\bin\packager.exe c:\Program Files\Java\jdk1.6.0_11\bin\policytool.exe c:\Program Files\Java\jdk1.6.0_11\bin\rmic.exe c:\Program Files\Java\jdk1.6.0_11\bin\rmid.exe c:\Program Files\Java\jdk1.6.0_11\bin\rmiregistry.exe c:\Program Files\Java\jdk1.6.0_11\bin\schemagen.exe c:\Program Files\Java\jdk1.6.0_11\bin\serialver.exe c:\Program Files\Java\jdk1.6.0_11\bin\servertool.exe c:\Program Files\Java\jdk1.6.0_11\bin\tnameserv.exe c:\Program Files\Java\jdk1.6.0_11\bin\unpack200.exe c:\Program Files\Java\jdk1.6.0_11\bin\wsgen.exe c:\Program Files\Java\jdk1.6.0_11\bin\wsimport.exe c:\Program Files\Java\jdk1.6.0_11\bin\xjc.exe |
|
返回顶楼 | |
发表时间:2011-07-18
http://www.iteye.com/topic/634530 这个讲的比较容易理解,讲的还挺好!!
|
|
返回顶楼 | |
发表时间:2011-07-18
看一下 深入了解java虚拟机 这本书吧,讲得还是比较详细的
|
|
返回顶楼 | |
发表时间:2011-07-18
抛出异常的爱 写道 你需要的是学习一些专用工具。。。。
比如 javah c:\Program Files\Java\jdk1.6.0_11\bin\appletviewer.exe c:\Program Files\Java\jdk1.6.0_11\bin\apt.exe c:\Program Files\Java\jdk1.6.0_11\bin\extcheck.exe c:\Program Files\Java\jdk1.6.0_11\bin\HtmlConverter.exe c:\Program Files\Java\jdk1.6.0_11\bin\idlj.exe c:\Program Files\Java\jdk1.6.0_11\bin\jar.exe c:\Program Files\Java\jdk1.6.0_11\bin\jarsigner.exe c:\Program Files\Java\jdk1.6.0_11\bin\java.exe c:\Program Files\Java\jdk1.6.0_11\bin\java-rmi.exe c:\Program Files\Java\jdk1.6.0_11\bin\javac.exe c:\Program Files\Java\jdk1.6.0_11\bin\javadoc.exe c:\Program Files\Java\jdk1.6.0_11\bin\javah.exe c:\Program Files\Java\jdk1.6.0_11\bin\javap.exe c:\Program Files\Java\jdk1.6.0_11\bin\javaw.exe c:\Program Files\Java\jdk1.6.0_11\bin\javaws.exe c:\Program Files\Java\jdk1.6.0_11\bin\jconsole.exe c:\Program Files\Java\jdk1.6.0_11\bin\jdb.exe c:\Program Files\Java\jdk1.6.0_11\bin\jhat.exe c:\Program Files\Java\jdk1.6.0_11\bin\jinfo.exe c:\Program Files\Java\jdk1.6.0_11\bin\jmap.exe c:\Program Files\Java\jdk1.6.0_11\bin\jps.exe c:\Program Files\Java\jdk1.6.0_11\bin\jrunscript.exe c:\Program Files\Java\jdk1.6.0_11\bin\jstack.exe c:\Program Files\Java\jdk1.6.0_11\bin\jstat.exe c:\Program Files\Java\jdk1.6.0_11\bin\jstatd.exe c:\Program Files\Java\jdk1.6.0_11\bin\jvisualvm.exe c:\Program Files\Java\jdk1.6.0_11\bin\keytool.exe c:\Program Files\Java\jdk1.6.0_11\bin\kinit.exe c:\Program Files\Java\jdk1.6.0_11\bin\klist.exe c:\Program Files\Java\jdk1.6.0_11\bin\ktab.exe c:\Program Files\Java\jdk1.6.0_11\bin\native2ascii.exe c:\Program Files\Java\jdk1.6.0_11\bin\orbd.exe c:\Program Files\Java\jdk1.6.0_11\bin\pack200.exe c:\Program Files\Java\jdk1.6.0_11\bin\packager.exe c:\Program Files\Java\jdk1.6.0_11\bin\policytool.exe c:\Program Files\Java\jdk1.6.0_11\bin\rmic.exe c:\Program Files\Java\jdk1.6.0_11\bin\rmid.exe c:\Program Files\Java\jdk1.6.0_11\bin\rmiregistry.exe c:\Program Files\Java\jdk1.6.0_11\bin\schemagen.exe c:\Program Files\Java\jdk1.6.0_11\bin\serialver.exe c:\Program Files\Java\jdk1.6.0_11\bin\servertool.exe c:\Program Files\Java\jdk1.6.0_11\bin\tnameserv.exe c:\Program Files\Java\jdk1.6.0_11\bin\unpack200.exe c:\Program Files\Java\jdk1.6.0_11\bin\wsgen.exe c:\Program Files\Java\jdk1.6.0_11\bin\wsimport.exe c:\Program Files\Java\jdk1.6.0_11\bin\xjc.exe 你说的莫非是javap? javah? JNI? |
|
返回顶楼 | |