1. 如何得到Java应用程序的可用内存?
2. 请说出下面例中的代码为什么可以运行?
class MainMethodNot
{
static
{
System.out.println("This java program have run without the run method");
System.exit(0);
}
}
3.class文件中的字符串采用何种编码,采用这种编码的好处是什么?
4.说说JVM原理?内存泄露与溢出区别,何时产生内存泄露?
2. 请说出下面例中的代码为什么可以运行?
class MainMethodNot
{
static
{
System.out.println("This java program have run without the run method");
System.exit(0);
}
}
3.class文件中的字符串采用何种编码,采用这种编码的好处是什么?
4.说说JVM原理?内存泄露与溢出区别,何时产生内存泄露?
new A();
2. 请说出下面例中的代码为什么可以运行?
静态代码块,JVM加载类时要先执行
3.class文件中的字符串采用何种编码,采用这种编码的好处是什么?
UNICODE
4.说说JVM原理?内存泄露与溢出区别,何时产生内存泄露?
泄露:内存被无用对象占用且不会被释放
溢出:JVM所能提供的内存不够用了
第四题jvm的原理:
是将.class 文件装入内存,并把这些.class 文件包含的伪指令解释为具体平台的机器指令,然后执行。内存溢出:在一个域中输入的数据超过了它的要求
理论上的求值方法是:Runtime.getRuntime().maxMemory()-Runtime.getRuntime().totalMemory()+Runtime.getRuntime().maxMemory() 这才是真正的虚拟机中的可用物理内存
理论上的求值方法是:Runtime.getRuntime().maxMemory()-Runtime.getRuntime().totalMemory()+Runtime.getRuntime().freeMemory() 这才是真正的虚拟机中的可用物理内存
Runtime.getRuntime().freeMemory()
2. 请说出下面例中的代码为什么可以运行?
静态代码块,JVM加载类时要先执行
3.class文件中的字符串采用何种编码,采用这种编码的好处是什么?
UNICODE
4.说说JVM原理?内存泄露与溢出区别,何时产生内存泄露?
泄露:内存被无用对象占用且不会被释放
溢出:JVM所能提供的内存不够用了
第四题的内存泄露
请见
http://www.ibm.com/developerworks/cn/java/l-JavaMemoryLeak/
java.lang.management.MemoryUsage mu = mmmx.getHeapMemoryUsage();
System.out.println(mu.getMax()/1024/1024);//最大内存 用double更好 单位M
System.out.println(mu.getUsed()/1024/1024);//已用内存
System.out.println("----"+(mu.getMax()/1024/1024-mu.getUsed()/1024/1024));//剩余内存
这是对的! 2. 请说出下面例中的代码为什么可以运行?
class MainMethodNot
{
static
{
System.out.println("This java program have run without the run method");
System.exit(0);
}
}由于static块在main方法执行之前执行,如果没有System.exit(0);那么上面的代码可以运行,但是会抛出异常!
这个小知识点很有用,在core java的静态变量中讲过
内存泄露指对象占有的资源没有释放,而溢出指内存空间不够用,出现其他数据被覆盖的现象!
举一个最明显的例子就是Windows 2000/XP以及微软Office2000及其后的产品。因为这些软件都是Unicode内核,因此,无论何种文字,都可以在上面正常显示,而且是同屏显示。以前,简体中文的Word文件拿到英文版打开就会是乱码,简体中文的程序在Windows英文版上运行会出现乱码,而现在一切都解决了。