论坛首页 Java企业应用论坛

Java内存管理

浏览 9539 次
精华帖 (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;
	}
	
	
}
   发表时间:2011-07-16  
同样菜鸟尝试解释下...求下面正确拍砖

   首先主方法启动了一个线程,MyGreeting类信息及其字段信息方法信息都存放在了方法区(永久区)中
   在这个线程里面有一个栈与其对应 变量myGreeting放在栈中..new出来的对象放在了“唯一”的堆中
   接下来你通过myGreeting这个引用为其指向的对象赋值,在赋值之前的三个变量放在栈中,赋值之后由于是类变量,所以放在堆中。
   System 应该先去方法区(永久区)将其加载,随后调用其方法把结果显示在控制台上,过程与上面大同小异..
   
   欢迎真正懂的给出更详细讲解或者拍砖指点,代表菜鸟们感激!
0 请登录后投票
   发表时间:2011-07-17  
程序新手 写道
同样菜鸟尝试解释下...求下面正确拍砖

   首先主方法启动了一个线程,MyGreeting类信息及其字段信息方法信息都存放在了方法区(永久区)中
   在这个线程里面有一个栈与其对应 变量myGreeting放在栈中..new出来的对象放在了“唯一”的堆中
   接下来你通过myGreeting这个引用为其指向的对象赋值,在赋值之前的三个变量放在栈中,赋值之后由于是类变量,所以放在堆中。
   System 应该先去方法区(永久区)将其加载,随后调用其方法把结果显示在控制台上,过程与上面大同小异..
   
   欢迎真正懂的给出更详细讲解或者拍砖指点,代表菜鸟们感激!

 

String是对象类型,所以赋值后会保存到堆中,但int是基本类型,赋值后应该保存在栈中吧。

0 请登录后投票
   发表时间:2011-07-17  
不知是大家不屑,还是不会?期望牛人出来说个详细的。
0 请登录后投票
   发表时间:2011-07-17  
同为新人,JAVA虚拟机原理书里讲得算是比较清晰的,不过我基础差,看得一知半解的
0 请登录后投票
   发表时间:2011-07-17  
牛人写的有关Java虚拟机或者内存管理的一些文章

LZ 麻烦你能不能给个链接啊?谢谢
0 请登录后投票
   发表时间: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
0 请登录后投票
   发表时间:2011-07-18  
http://www.iteye.com/topic/634530  这个讲的比较容易理解,讲的还挺好!!
0 请登录后投票
   发表时间:2011-07-18  
看一下  深入了解java虚拟机 这本书吧,讲得还是比较详细的
0 请登录后投票
   发表时间: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?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics