标签:JVM

Java线程池大小、线程数量设置多少才合适?

Java线程池大小、线程数量究竟设置多少才合适?可能很多人都看到过一个线程数设置的理论: IO密集型:核心线程数 = CPU核数 / (1-阻塞系数) CPU密集型:核心线程数 = CPU核数 + 1 IO密集型:核心线程数 = CPU核数 * 2 以上这个理论我们也在文章《Java创建线程池的几种方式具体实现》中的第六点也提及过,但是按照这个理论规划线……

Java 异常处理:无错误代码的 20 个最佳实践

本文主要介绍Java 异常处理种无错误代码的 20 个最佳实践案例。 1. Java 中的内置异常 在我们深入探讨异常处理最佳实践的深入概念之前,让我们从最重要的概念之一开始,即了解 Java 中存在三种常见类型的可抛出类。 1.1. 检查异常 受检查的异常必须在方法的throws子句中声明。它们继承了Exception类,旨在成为“面对面”类型的异常。Ja……

Java 检查异常与非检查异常

在本Java 异常教程中,了解 Java 中的异常是什么,以及检查异常和未检查异常之间的区别。我们还将学习一些 Java异常处理最佳实践。 1.Java中的异常是什么? “异常是在程序执行过程中发生的意外事件,它扰乱了正常的指令流。” 在Java中,所有错误和异常都是类的类型Throwable。 当方法内发生错误时,该方法会创建一个对象(或 的任何子类型T……

Java throw 和 throws 关键字

在 Java 异常处理中,throw关键字用于从方法或构造函数中显式抛出异常。throws关键字用于声明该方法或构造函数可能抛出的异常列表。 1.throw 在深入研究之前,让我们先了解一下有关throw关键字的基本知识。 1.1. 句法 要从方法或构造函数抛出异常,请使用throw 关键字和异常类的实例。 public void method() { ……

Java try catch finally捕获异常处理

Java try、catch 和finally块有助于编写可能在运行时抛出异常的应用程序代码,并让我们有机会通过执行备用应用程序逻辑从异常中恢复或优雅地处理异常以向用户报告。它有助于防止难看的应用程序崩溃。 请注意,建议每次可以使用时都使用try-with-resources块。 1. 基础知识 在深入了解这个概念之前,让我们先了解一下try-catch块及……

Java String面试题汇总

给定的Java String面试问题涵盖了字符串方法、字符串不可变性和内存泄漏问题,以及简单的示例和用例。我将尽力涵盖Java面试中最常问的String类相关问题。 Java中String是关键字吗? 不是的。String不是Java中的保留关键字。它是一种派生数据类型,也就是一个类。 public class StringExample { p……

Java 字符串常量池

了解Java中的String类,创建它的不可变性背后的动机,以及String常量池的概念。我们将看到当我们通过String文字或String构造函数创建String实例时,内存是如何被操作的。最后,我们将讨论String类的不可变性引起的主要优点和缺点。 1.Java中的不可变字符串 字符串是字符序列。在Java中,与其他编程语言类似,字符串是预定义类型的一……

谈谈Java内存泄漏如何分析及解决方案

Java面试题:谈谈Java内存泄漏的原因及解决方案 得分点: 分析器、详细日志、引用对象、泄漏警告、基准测试、代码审查 标准回答: 内存泄漏是指不再使用的对象仍然被引用,导致垃圾收集器无法回收它们的内存。这种情况可能会导致内存资源的不断积累,最终触发致命的OutOfMemoryError。以下是分析和解决内存泄漏问题的方法: 启用分析器:Java分析器是……

谈谈Java内存溢出的原因及解决方案

Java面试题:谈谈Java内存溢出的原因及解决方案 得分点: 增加内存、错误日志、代码走查、内存查看工具 标准回答: 内存溢出,简单来说,就是在程序运行过程中所申请的内存超过了系统所能提供的内存,从而导致无法获得足够的内存资源,进而引发内存溢出异常。内存溢出的主要原因包括以下几种情况: 数据量过大:例如,一次性从数据库中获取了过多的数据。 对象引用未清空……

谈谈Java中类的实例化过程

Java面试题:谈谈Java中类的实例化过程 得分点: 类加载、分配内存、初始化零值、状态设置、构造函数 标准回答: 在 JVM 中,对象的创建遵循如下过程: 类加载: 当 JVM 遇到一条字节码 new 指令时,首先检查该指令的参数是否能在常量池中找到一个类的符号引用,并验证该类是否已被加载、解析和初始化。如果尚未加载,则必须先执行相应的类加载过程。 分……

谈谈对JVM的双亲委派模型的理解

Java面试题:谈谈对JVM的双亲委派模型的理解 得分点: 启动类加载器、扩展类加载器、应用程序类加载器。 标准回答: 对于JDK 8及其之前版本的Java应用,通常会使用以下三个系统提供的类加载器来进行加载: 启动类加载器:这个类加载器负责加载存放在<java_home>\lib目录,或者被-Xbootclasspath参数所指定的路径中存放……

谈谈Java中类加载机制的理解

Java面试题:谈谈Java中类加载机制的理解 得分点: 加载、验证、准备、解析、初始化。 标准回答: 一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期将会经历加载、验证、准备、解析、初始化、使用、卸载七个阶段,其中验证、准备、解析三个部分统称为连接,而前五个阶段则是类加载的完整过程。 加载阶段:JVM需要在内存中生成一个代表这个类……