大部分内容来源网络,整理一下,留个底。

问:堆和栈有什么区别? 
答:堆是存放对象的,但是对象内的临时变量是存在栈内存中,如例子中的methodVar是在运行期存放到栈中的。 栈是跟随线程的,有线程就有栈,堆是跟随JVM的,有JVM就有堆内存。

问: 堆内存中到底存在着什么东西? 
答:对象,包括对象变量以及对象方法。

问:类变量和实例变量有什么区别? 
答:静态变量是类变量,非静态变量是实例变量,直白的说,有 static修饰的变量是静态变量,没有 static修饰的变量是实例变量。静态变量存在方法区中,实例变量存在堆内存中。

问:Java 的方法(函数 函数函数 函数)到底是传值还是传址? 
答:都不是,是以传值的方式传递地址,具体的说原生数据类型传递的值,引用类型传递的地址。对于原始数据类型, JVM的处理方法是从 Method Area或Heap中拷贝到 Stack,然后运行 frame中的方法,运行完毕后再把变量指拷贝回去。

问:为什么会产生OutOfMemory? 
答:一句话:Heap 内存中没有足够的可用内存了。这句话要好好理解,不是说 Heap没有内存了,是说新申请内存的对象大于 Heap空闲内存,比如现在 Heap还空闲 1M,但是新申请的内存需要 1.1M,于是就会报 OutOfMemory了,可能以后的对象申请的内存都只要0.9M,于是就只出现一次OutOfMemory,GC也正常了,看起来像偶发事件,就是这么回事。 但如果此时 GC没有回收就会产生挂起情况,系统不响应了。

问 :我产生的对象不多呀 ,为什么还会产生OutOfMemory? 
答:你继承层次忒多了,Heap中 产生的对象是先产生 父类,然后才产生子类,明白不?

问:OutOfMemory 错误分几种? 
答:分两种,分别是“OutOfMemoryError:java heap size”和”OutOfMemoryError: PermGen space”,两种都是内存溢出,heap size是说申请不到新的内存了,这个很常见,检查应用或调整堆内存大小。 “PermGen space”是因为永久存储区满了,这个也很常见,一般在热发布的环境中出现,是因为每次发布应用系统都不重启,久而久之永久存储区中的死对象太多导致新对象无法申请内存,一般重新启动一下即可。

问:为什么会产生StackOverflowError? 
答:因为一个线程把 Stack 内存全部耗尽了,一般是递归函数造成的。

问:一个机器上可以看多个JVM吗?JVM 之间可以互访吗? 
答:可以多个JVM,只要机器承受得了。JVM之间是不可以互访,你不能在A-JVM中访问B-JVM的Heap 内存,这是不可能的。在以前老版本的JVM中,会出现A-JVM Crack后影响到B-JVM,现在版本非常少见。

问:为什么Java要采用垃圾回收机制,而不采用 C/C++的显式内存管理? 
答:为了简单,内存管理不是每个程序员都能折腾好的。

问:JVM 中到底哪些区域是共享的?哪些是私有的? 
答:Heap和 Method Area是共享的,其他都是私有的,

问:什么是JIT? 
答:JIT 是指Just In Time,有的文档把JIT 作为JVM的一个部件来介绍,有的是作为执行引 
擎的一部分来介绍,这都能理解。Java刚诞生的时候是一个解释性语言,别嘘,即使编译成了字 
节码(byte code)也是针对JVM的,它需要再次翻译成原生代码(native code)才能被机器执行,于 
是效率的担忧就提出来了。Sun为了解决该问题提出了一套新的机制,好,你想编译成原生代码, 
没问题,我在JVM上提供一个工具,把字节码编译成原生码,下次你来访问的时候直接访问原生 
码就成了,于是JIT 就诞生了,就这么回事。

问:JVM 还有哪些部分是你没有提到的? 
答:JVM是一个异常复杂的东西,写一本砖头书都不为过,还有几个要说明的: 
常量池(constant pool):按照顺序存放程序中的常量,并且进行索引编号的区域。比如 int i =100,这个 100 就放在常量池中。 
安全管理器(Security Manager):提供Java运行期的安全控制,防止恶意攻击,比如指定读取文件,写入文件权限,网络访问,创建进程等等,Class Loader在 Security Manager认证通过后才能加载 class文件的。 
方法索引表(Methods table),记录的是每个 method 的地址信息,Stack和 Heap 中的地址指针其实是指向 Methods table地址。

问:为什么不建议在程序中显式的生命System.gc()? 
答:因为显式声明是做堆内存全扫描,也就是 Full GC,是需要停止所有的活动的(Stop The World Collection),你的应用能承受这个吗?而其显示调用System.gc()只是给虚拟机一个建议,不一定会执行,因为System.gc()在一个优先级很低的线程中执行。

问:JVM 有哪些调整参数? 
答:非常多,堆内存、栈内存的大小都可以定义,甚至是堆内存的三个部分、新生代的各个比例都能调整。

文章转自:http://blog.csdn.net/ol_beta/article/details/6614351

JVM相关问答的更多相关文章

  1. JVM相关参数配置和问题诊断<转>

    原文连接:http://blog.csdn.net/chjttony/article/details/6240457 1.Websphere JVM相关问题诊断: 由JVM引起的Websphere问题 ...

  2. 3.1日 重温JVM相关信息

    1.JDK.JRE.JVM的关系: JDK是java开发的必备工具箱,JDK其中有一部分是JRE,JRE是JAVA运行环境,JVM则是JRE最核心的部分. 2.JVM的组成: JVM由4大部分组成:C ...

  3. JVM相关知识

    Java虚拟机学习分享最近主要在学习JVM相关知识,-知识主要来源<深入理解JAVA虚拟机>,深有感触,结合自己的理解,整理出一些经验,由于篇幅较长,就把链接帖出来,希望对大家有所帮助: ...

  4. SCI投稿过程总结、投稿状态解析、拒稿后对策及接受后期相关问答

    SCI投稿过程总结.投稿状态解析.拒稿后对策及接受后期相关问答   http://muchong.com/t-9174366-1 SCI投稿过程总结.投稿状态解析.拒稿后处理对策及接受后期相关问答综合 ...

  5. 了解java虚拟机—JVM相关参数设置(2)

    1.   JVM相关参数设置 JVM相关配置 -XX:+PrintGC 两次次YoungGC,两次FullGC. -XX:+PrintGCDetails 打印GC时的内存,并且在程序结束时打印堆内存使 ...

  6. 几个与JVM相关的JDK工具:jps, jstat, jmap

    在项目中遇到OOM(Out of Memory)的问题,为了分析内存和JVM的垃圾回收器GC问题,一并把JVM相关的一些工具也研究了一下: jps:Java进程查看工具,实际上它和Unix/Linux ...

  7. Java虚拟机JVM相关知识整理

    Java虚拟机JVM的作用: Java源文件(.java)通过编译器编译成.class文件,.class文件通过JVM中的解释器解释成特定机器上的机器代码,从而实现Java语言的跨平台. JVM的体系 ...

  8. JVM相关参数设置

    Java启动参数共分为三类: 其一是标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容: 其二是非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足, ...

  9. JVM相关 - 深入理解 System.gc()

    本文基于 Java 17-ea,但是相关设计在 Java 11 之后是大致一样的 我们经常在面试中询问 System.gc() 究竟会不会立刻触发 Full GC,网上也有很多人给出了答案,但是这些答 ...

随机推荐

  1. Xcode配置libdc1394

    libdc1394是一个开源库,提供了一个Mac下完整的1394相机编程接口,这篇文章将介绍Xcode如何配置该库. 步骤: 1.下载libdc1394的源码,并解压 http://damien.do ...

  2. 从零开始学习Linux (cd命令)

    上一篇博客中提到,我们学习命令大多都要参考 --help 这个选项.但是cd命令并没有这个选项. 我们可以通过 help cd 来查看cd的使用方式.其实cd命令挺简单的,它的作用是进入文件夹,也就是 ...

  3. FL2440驱动添加(3)LCD驱动添加学习笔记

    FL2440 LCD内置控制器,320*240 TFT型LCD. 自我理解总结的两种添加驱动模式: 非platform方式添加驱动: 加载驱动: 1,硬件初始化,申请内存,并作地址映射 2,分配设备号 ...

  4. 每一个成功的程序员的身后都有一个--------Parse

    相信好多同行都用过Parse,而正是因为Parse给我们的开发带来的极大的便利,才有了项目从零开始,到正式上线仅仅用上不到两周的时间,现在Swift还在迅速的发展,很快就会占有大量的市场,现在就就结合 ...

  5. 利用Jquery使用HTML5的FormData属性实现对文件的上传

    1.利用Jquery使用HTML5的FormData属性实现对文件的上传 在HTML5以前我们如果需要实现文件上传服务器等功能的时候,有时候我们不得不依赖于FLASH去实现,而在HTML5到来之后,我 ...

  6. DOM性能小记

    在使用DOM操作时,同样的效果用不同的方式来实现,性能方面也会有很大的差异.尤其在移动式设备上,资源本来就很有限,一旦DOM写不好的话操作就会非常卡顿.这个周末,就写个DOM性能小记吧.错漏之处,望多 ...

  7. 关于oracle-12514错误的修改方法

    原因1: 打开文件"<OracleHome>/network/admin/listener.ora",添加 (SID_DESC =         (GLOBAL_DB ...

  8. 2015第18本:从0到1,ZERO to ONE, Notes on startups, or how to build the future

    <从0到1>中文版的副标题是”开创商业与未来的秘密“,题目大得吓人,英文副标题就谨慎了许多:Notes on startups, or how to build the future. 全 ...

  9. android内存泄露调试,Heap,MAT

    三.内存监测工具 DDMS --> Heap 无论怎么小心,想完全避免bad code是不可能的,此时就需要一些工具来帮助我们检查代码中是否存在会造成内存泄漏的地方.Android tools中 ...

  10. Jeff Somers's N Queens Solutions 最快的n皇后算法

    /* Jeff Somers * * Copyright (c) 2002 * * jsomers@alumni.williams.edu * or * allagash98@yahoo.com * ...