大部分内容来源网络,整理一下,留个底。
问:堆和栈有什么区别?
答:堆是存放对象的,但是对象内的临时变量是存在栈内存中,如例子中的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 有哪些调整参数?
答:非常多,堆内存、栈内存的大小都可以定义,甚至是堆内存的三个部分、新生代的各个比例都能调整。
分享到:
相关推荐
My-Note-Utils-Learn xiaoshaDestiny:学习笔记,类库,面试QA learn-activemq 消息队列 ActiveMQ的使用,Spring整合ActiveMQ learn-data-tructure 数据结构 ...QA 面试常见问答整理(JUC,Mysql,JVM,Map)
java集合、基础、jvm、spingmybatis、mysql、计网、线程、设计模式、nginx、Kafka、Linux、RabbitMQ等等面试问答(包含答案),免费下载
Java面试问答 Q0。 解释一下Java的优缺点。 Java的最大优点是它与使用JVM的平台无关。 使用Java编译代码时,将以字节码(.class)格式输出。 该字节码将转换为完整的机器代码,并在运行时由JVM执行。 如果仅使用一...
这得益于Java虚拟机(JVM),它充当了代码和底层硬件之间的中介。 面向对象: Java是一种纯粹的面向对象编程语言,支持封装、继承和多态等面向对象的概念。这使得Java编写的代码更加模块化、可维护和可扩展。 多...
包含JVM、JAVA集合、多线程并发、JAVA基础、Spring原理、微服务、Netty与RPC、网络、日志、Zookeeper、Kafka、RabbitMQ、HBASE、MongoDB、Cassandra、设计模式、负载均衡、数据库、加密算法、分布式缓存、Hadoop、...
java答疑系统源码Java面试问答 期望 良好的Java知识 完整课程链接 你需要知道的事情 Github资料库 PDF指南 在课程资源中可用 安装Eclipse,Java和Maven PDF格式 视频 : GIT资料库: 面试问题 Java平台 1。 为什么...
java问答论坛源码 Java-interview-questions 统一收集整理所有Java相关的面试题。 github地址: 如果觉得对你有用,给个star吧。 面向对象 UML介绍 设计模式 Java8 对象与垃圾回收 集合 泛型 类加载机制与反射 网络...
这得益于Java虚拟机(JVM),它充当了代码和底层硬件之间的中介。 面向对象: Java是一种纯粹的面向对象编程语言,支持封装、继承和多态等面向对象的概念。这使得Java编写的代码更加模块化、可维护和可扩展。 多...
这得益于Java虚拟机(JVM),它充当了代码和底层硬件之间的中介。 面向对象: Java是一种纯粹的面向对象编程语言,支持封装、继承和多态等面向对象的概念。这使得Java编写的代码更加模块化、可维护和可扩展。 多...
1.最新整理Android面试题 2.涵盖Java基础,jvm,Android常见面试问答,Kotlin面试题
这个整理的最新的java后端面试题分为5部分,包含J2EE基础题,数据库,缓存服务器,jvm,网络相关,主流框架以及微服务,分布式,大数据量等
Java基础、Java内存模型、Java面向对象、Java集合体系、接口、Lambda表达式、类加载机制、内部类、代理类、Java并发、JVM、Java后端编译、Spring 3. Go defer底层原理、goroutine、select实现机制 4. 算法学习 数组...
内容主要来源于行业内一大批高质量的优秀公众号,如Hollis、程序员小灰、漫画编程等公号翘楚,以及本人平常收集的一些开源问答、课程、社区文章等。感兴趣的可以点击文件中的原文链接去查看原文。(于2018年12月27日...
本书以问答的形式组织内容,讨论了学习或使用Java语言的过程中经常遇到的一些问题。这些问题均是在经过充分调研的基础上,从实际应用中总结出来的,是作者和众多Java开发者的经验总结。书中精选了Java开发人员经常...
具体可以参阅博主的系列Java文章:【2023,学点儿新Java-10】Java17 API 文档简介&获取 | 什么是API | 详解Java核心机制——JVM | Java优缺点总结 | 附:GPT3.5-turbo问答测试。
科技政策分析中包括科技政策对比、演化和主题词分析以及智能问答,政策文件管理主要是政策类别管理。服务支撑层是该系统用到的主要方法,用来对数据进行加工。服务支撑层包括:文本自动分类、提取科技政策文本关键词...
科技政策分析中包括科技政策对比、演化和主题词分析以及智能问答,政策文件管理主要是政策类别管理。服务支撑层是该系统用到的主要方法,用来对数据进行加工。服务支撑层包括:文本自动分类、提取科技政策文本关键词...
144、当我重编译我的JSP使用的一个类后,为什么JVM继续使用我的老CLASS? 36 145、 file="abc.jsp"%>与 page="abc.jsp"/>之间的差别? 36 146、JSP的缺点? 36 148、如何实现JSP的国际化? 36 150、如何在JSP中...
144、当我重编译我的JSP使用的一个类后,为什么JVM继续使用我的老CLASS? 36 145、与之间的差别? 36 146、JSP的缺点? 36 148、如何实现JSP的国际化? 36 150、如何在JSP中包括绝对路径文件? 使用URLConnection...
JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的...