Ryan's Blog

Outofmemory和stackoverflow的区别是什么

OutOfMemory和StackOverflow的区别是什么 典型回答 OutOfMemory 是内存溢出错误,他通常发生在程序试图分配内存时,但是超出可用内存限制。这可能是因为程序使用了太多内存,或者由于内存泄漏而导致内存不断累积。 StackOverflow 是栈溢出错误,他通常发生在程序的调用栈变得过深时,如递归调用。每次函数调用都会在栈上分配一些内存,当递归调用或者函数调用层...

Java的堆是如何分代的?为什么分代?

Java的堆是如何分代的?为什么分代? 典型回答 Java的堆内存分代是指将不同生命周期的堆内存对象存储在不同的堆内存区域中,这里的不同的堆内存区域被定义为“代”。这样做有助于提升垃圾回收的效率,因为这样的话就可以为不同的”代”设置不同的回收策略。 一般来说,Java中的大部分对象都是朝生夕死的,同时也有一部分对象会持久存在。因为如果把这两部分对象放到一起分析和回收,这样效率实在是太低...

Java是编译型还是解释型_

Java是编译型还是解释型? 典型回答 我们常用的编程语言,比如C语言、Java、Python、Go等都是高级语言,想要把高级语言转变成计算机认识的机器语言有两种方式,分别是编译和解释。 通常认为编译的过程就是通过编译器(compiler)把高级语言的源代码,直接编译成可以被机器执行的机器码,交由机器执行。如C语言。 而解释的过程就是通过解释器(interpreter)直接解释执行,不...

Java是如何实现的平台无关?

Java是如何实现的平台无关? 典型回答 什么是平台无关性 平台无关性就是一种语言在计算机上的运行不受平台的约束,一次编译,到处执行(Write Once ,Run Anywhere)。 也就是说,用Java创建的可执行二进制程序,能够不加改变的运行于多个平台。 平台无关性的实现 对于Java的平台无关性的支持,就像对安全性和网络移动性的支持一样,是分布在整个Java体系结构中的。其中...

Java发生了oom一定会导致jvm退出吗?

Java发生了OOM一定会导致JVM 退出吗? 典型回答 我们在Java中遇到的比较严重的问题应该就是OutOfMemoryError,StackOverflowError等这些问题了,那么,如果遇到这些问题,JVM一定会退出吗? 我们知道,JVM是一个操作系统的进程,而在Linux和其他类Unix操作系统中,当一个进程在执行非法内存访问时,如访问未分配给它的内存或者访问超出其允许...

Java中类加载的过程是怎么样的?

Java中类加载的过程是怎么样的? 典型回答 Java中类的加载阶段分为加载(Loading)、链接(Linking)和初始化(Initialization)。其中连接过程又包含了验证、准备和解析。 加载阶段 加载阶段的目的是将类的.class文件加载到JVM中。在这个阶段,JVM会根据类的全限定名来获取定义该类的二进制字节流,并将这个字节流所代表的静态存储结构转换为方法区的运行...

Java中的类什么时候会被加载?

Java中的类什么时候会被加载? 典型回答 Java中的类在以下几种情况中会被加载: 当创建类的实例时,如果该类还没有被加载,则会触发类的加载。例如,通过关键字new创建一个类的对象时,JVM会检查该类是否已经加载,如果没有加载,则会调用类加载器进行加载。 当使用类的静态变量或静态方法时,如果该类还没有被加载,则会触发类的加载。例如,当调用某个类的静...

Java中的对象一定在堆上分配内存吗?

Java中的对象一定在堆上分配内存吗? 典型回答 不一定,在HotSpot虚拟机中,存在JIT优化的机制,JIT优化中可能会进行逃逸分析,当经过逃逸分析发现某一个局部对象没有逃逸到线程和方法外的话,那么这个对象就可能不会在堆上分配内存,而是进行栈上分配。 扩展知识 逃逸分析 简单介绍一下JIT优化技术? 标量替换 标量(Scalar)是指一个无法再分解成更小的数据的数据。Jav...

Java一定就是平台无关的吗?

Java一定就是平台无关的吗? 典型回答 不一定! 虽然Java在诞生之初,设计的主要目标就是跨平台,并且也做了很多事情来让这个成为可能,也是很多年来Java的一个重要优势。 Java是如何实现的平台无关? 其中比较重要的就是通过JVM的平台有关来实现了java语言的平台无关。也就是说只要设备上安装了相应平台的 JVM,Java 程序就可以在任何平台上运行,不需要做任何修改。这就是...