`
ol_beta
  • 浏览: 289384 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

JVM问答

阅读更多

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

问:堆和栈有什么区别?
答:堆是存放对象的,但是对象内的临时变量是存在栈内存中,如例子中的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 有哪些调整参数?
答:非常多,堆内存、栈内存的大小都可以定义,甚至是堆内存的三个部分、新生代的各个比例都能调整。

 

分享到:
评论

相关推荐

    01-JVM综合53问(带答案)

    【JVM综合53问】是一份针对Java虚拟机(JVM)的全面问答文档,旨在帮助Java开发者深入理解和优化JVM。以下是其中涉及到的一些关键知识点: 1. **为何学习JVM?** - **面试需求**:在招聘中,企业越来越重视技术...

    Inside the JVM

    - 问答环节 #### Java内存管理基础 在计算机科学中,内存是任何程序运行的基础资源之一。Java应用程序作为单个进程运行,并不与其他进程共享内存。每个进程会分配自己的堆空间,用于存储对象实例和其他数据。Java...

    java问答式教程

    15. **JVM优化** - 内存模型:堆、栈、方法区、本地方法栈等。 - 调优工具:JVisualVM、JConsole、JProfiler等。 以上只是Java语言学习的部分关键知识点,实际的《Java 问答式教程》将涵盖更多具体问题和实战案例...

    Java经典问答 pdg格式

    Java作为一门广泛使用的编程语言,其经典问答涵盖了众多领域,包括基础语法、面向对象特性、集合框架、多线程、异常处理、IO流、网络编程、反射机制、JVM优化、设计模式等。这份"Java经典问答"资料,无疑是准备面试...

    java技术经典问答

    这些问答涵盖了各种核心概念、设计模式、异常处理、多线程、集合框架、IO流、网络编程、JVM优化等多个方面,对于Java技术爱好者来说,是提升知识深度和广度的宝贵资料。 1. **Java核心概念** - **对象与类**:Java...

    java基础知识问答

    ### Java基础知识问答详解 #### 一、JRE与JDK的区别及应用场景 1. **JRE(Java Runtime Environment)**:是Java运行环境的基础部分,包括了Java虚拟机(JVM)以及Java类库标准版。它使得Java应用程序可以在任何...

    java基础知识30个经典问答

    Java虚拟机(JVM)有堆、栈、方法区、本地方法栈和程序计数器五种内存区域。 5. **什么是垃圾回收?** 垃圾回收是Java自动进行内存管理的一种机制,它会找出不再使用的对象并释放其占用的内存。 6. **Java的异常...

    JAVA面试很全的一个资料,不过仅针对面试哦,日常学习不合适。内容以问答形式。

    这份资料以问答的形式呈现,为面试者提供了一个全面的复习指南。 首先,我们深入探讨JVM(Java虚拟机)。JVM是Java程序运行的基础,它负责解析字节码并执行Java代码。线程是JVM中的重要概念,线程的创建、调度和...

    有关Java经典问答

    以上只是Java经典问答可能涵盖的部分知识点,实际的问答可能还会涉及到更多高级特性和最佳实践,如并发编程、性能优化、JVM调优、Spring Boot、微服务架构等。不断学习和实践,是成为一名优秀的Java开发者的必经之路...

    JavaSE笔试问答题.docx

    27. Java有JVM、JRE和JDK,JVM是运行Java字节码的环境,JRE包含JVM和Java库,JDK是开发工具包,包含了JRE和开发工具。 28. 重载是方法名相同但参数列表不同的方法,覆盖是子类重写父类的同名方法,隐藏是子类拥有和...

    My-Note-Utils-Learn:学习笔记,类库。ActiveMQ消息队列,Layui常用公共类库,设计模式编码,多线程,JVM等

    My-Note-Utils-Learn xiaoshaDestiny:学习笔记,类库,面试QA learn-activemq 消息队列 ActiveMQ的使用,Spring整合ActiveMQ learn-data-tructure 数据结构 ...QA 面试常见问答整理(JUC,Mysql,JVM,Map)

    JAVA面试常见问答

    【JAVA面试常见问答】 在Java面试中,面试官通常会关注应聘者的面向对象编程理解、核心概念掌握以及语言新特性的应用。以下是针对这些常见面试题的详细解答: 1. **面向对象编程(OOP)** OOP是Java语言的基础,...

    FlyCms 是一个类似知乎以问答为基础的完全开源的JAVA语言开发的社交网络建站程序,基于 Spring Boot.zip

    FlyCms 是一款以问答模式为核心,旨在构建社交网络的开源建站程序,其设计灵感来源于知名的在线问答社区知乎。这款软件是用 Java 语言开发的,并且利用了现代化的框架 Spring Boot,使得系统架构更为简洁、高效。在...

    JAVA问答题.pdf

    这份"JAVA问答题.pdf"很可能包含了对Java基础知识、进阶特性以及最佳实践的问答,涵盖了许多关键知识点。以下是一些可能涉及的Java知识: 1. **基础概念** - **Java的特点**:理解Java的跨平台性(Write Once, Run...

    java完全自学手册_问答题解答

    3. “Write Once, Run Anywhere”:这一理念强调了Java的可移植性,编写一次的Java程序可以在任何支持JVM的平台上运行,无需重新编译。 【Java程序类型】 Java程序主要分为两类: 1. Java Application:独立运行的...

    全面解析Java面试常见问答

    从基本概念到进阶知识点,覆盖面向对象的原则、多线程模型、集合类的理解等各个方面,特别强调了诸如垃圾回收机制这样的JVM相关内容。它还介绍了最新版本的Java特性和并发编程技巧,有助于提升Java开发者的技术储备...

    90个高质量的java问答_java_源码

    11. **JVM原理**:理解JVM的内存结构(堆、栈、方法区等),类加载机制,以及如何优化JVM参数。 12. **设计模式**:介绍常见的设计模式,如单例模式、工厂模式、装饰器模式、观察者模式等,以及如何在Java项目中...

    JAVA基础知识及问答.rar

    这个"JAVA基础知识及问答.rar"压缩包文件包含了关于Java语言的基础知识和常见问题解答,对于初学者或希望巩固基础的开发者来说是非常有价值的资源。 1. **Java基本概念** - **面向对象**:Java是一种面向对象的...

    Java 经典问答

    11. **JVM**:了解JVM的工作原理,内存模型(堆、栈、方法区),垃圾收集机制,以及性能优化策略。 12. **设计模式**:单例、工厂、观察者、装饰器、代理等23种设计模式的应用场景和实现方式。 13. **Spring框架**...

    JAVA基础知识问答大全.rar

    这份“JAVA基础知识问答大全”涵盖了Java学习者最关心的核心概念,包括语法、类库、编程实践等多个方面。以下是对其中一些关键知识点的详细阐述: 1. **Java语言基础** - **变量与数据类型**:Java提供了基本数据...

Global site tag (gtag.js) - Google Analytics