前情回顾:
【2023,学点儿新Java-12】小结:阶段性复习 | Java学习书籍推荐(小白该读哪类Java书籍?有一定基础后,再去读哪类书籍?)
【2023,学点儿新Java-11】基础案例练习:输出个人基础信息、输出心形 | Java中 制表符\t 和 换行符\n 的简单练习
【2023,学点儿新Java-10】Java17 API文档简介&获取 |详解Java核心机制:JVM |详解Java内存泄漏与溢出 |Java优缺点总结 |附:GPT3.5-turbo问答测试
…
更多Java系列文章,可参阅博主主页哦!
对于绝大多数人而言,人生不是轨道,也不是旷野,更像是一片树林。轨道太过于局限,旷野太过于自由。
树林里有很多人踏出来的小路,但更多的是 还没有涉足的林地。你可以选择走那些小路,也可以选择去走那些人迹罕至的地方。
作者主页: 追光者♂
个人简介:
[1] 计算机专业硕士研究生
[2] 2022年度博客之星人工智能领域TOP4
[3] 阿里云社区特邀专家博主
[4] CSDN-人工智能领域优质创作者
[5] 预期2023年10月份 · 准CSDN博客专家
- 无限进步,一起追光!!!
感谢大家 点赞 收藏⭐ 留言!!!
本篇也属于Java基础的阶段性复习。主要针对 阿里巴巴和拼多多等大厂中对于Java基础可能会提到的一些问题。其中对于Java中的内存溢出和内存泄漏提到了一些解决方案。
答:是的!~
在一个”.java”源文件中可以包括多个类,但仅能有一个public类。这是因为Java源文件中的public类 必须与文件名相同,而其他非public类则可以存在于同一个源文件中,但是它们不能被其他源文件访问。
此外,如果一个源文件包含多个类,则编译时会生成 与每个类相关的.class文件,而不是 只生成一个.class文件,这种情况下,每个类 对应的.class文件的名称都与其类名相同。
若是 用几个词 描述一下的话:
丰富一下的话:
Java具有以下优势:
简单易学
:Java的语法和结构 类似于C++,但是 相对更简单易学,并且减少了一些C++中易犯的错误。
跨平台性
:Java使用的是JVM(Java虚拟机)来运行代码,这使得Java程序 可以在不同的操作系统上运行,而不需要 针对不同操作系统 编写不同的代码。
面向对象编程
:Java是一种面向对象的语言,它支持封装、继承和多态等概念,让程序 更加具有可读性、可扩展性和可维护性。
安全性高
:Java的代码运行在虚拟机中,没有直接访问操作系统的权限,因此可以有效地防止针对操作系统的攻击。
内存管理
:Java提供了 自动内存管理机制,开发人员 不需要自己去管理内存,这样可以 避免内存泄漏和其他内存问题。
多线程支持
:Java提供了 多线程支持,可以充分利用 多处理器计算机的性能。
强大的开源生态系统
:Java的开源生态系统 非常活跃,有大量的库和框架可供选择,开发人员 可以使用这些工具 来提高开发效率和代码质量。
…
说到“跨平台”和“面向对象”,事实上 现在有很多语言都支持这二者。但是与Java相比,它们可能没有太过“发达”的社区。
如上所述,Java的“社区”是很“繁荣”的,有许多的第三方框架 可以去使用。基本上需要什么样的功能,都可以去开源社区去找到对应的框架(技术)去调用,这也是Java极其具备优势的“一个点”。
其实
Android
最初是想使用C或C++来作为开发语言的,但其最终的底层开发语言主要还是选择了Java,原因之一也是Java社区很繁荣。
这里 不再对之前已经介绍过的 基础命令行操作 进行回顾啦!大家可以浏览之前的系列文章。
以下是其它的Java常用命令行操作:(这些命令行操作 可以帮助Java开发人员快速、准确地定位问题,并提高Java程序的性能和稳定性。) 包括但不限于下述一些常用的Java命令行指令。
javac:用于编译
Java源代码文件,将其转换成 可执行的字节码文件
。
java:用于运行Java字节码文件,JVM
会解释字节码,将代码
转换成 操作系统可以执行的机器码
。
jar:用于创建JAR(Java Archive)归档文件,可以将一组 类库文件打包
成一个单独的文件 进行管理和发布
。
jps:用于列出
当前正在运行的Java进程
,可以显示 每个Java进程的PID
(进程ID)和类名。
jstat:用于监视
Java程序运行时的状态
,例如垃圾回收、线程、类、编译等。
jmap:用于生成Java堆转储文件,用于诊断内存问题
。
jstack:用于生成Java进程中 每个Java线程的堆栈跟踪信息,有助于 调试线程问题
。
jcmd:用于发送命令 到指定的Java进程,可以执行 诸如GC、垃圾回收等操作。
javap:用于查看Java字节码文件的反编译结果
,可以查看 类中的字段和方法。
jconsole:Java虚拟机 监视工具
,可以监控 运行中的Java程序的性能、内存、线程和资源信息。
答案是 Yes!在 Java中 存在内存溢出和内存泄漏问题。
简单地讲,内存溢出(OOM)是指 在申请内存时 没有足够的内存空间可用,而内存泄漏 则是指 本应该被回收的内存没有被回收,最终导致内存被耗尽。(关于Java内存泄漏与内存溢出,更多可参阅:详解Java内存泄漏和内存溢出)
下面列举几个解决内存溢出、内存泄漏的 方法 和 具体实例:
减少对象创建:Java通过 垃圾回收器 来回收内存,在这个过程中,如果程序 频繁地创建、销毁对象,将导致 垃圾回收器的频繁运行,从而导致性能降低和内存溢出。可以使用对象池技术 来缓存对象,避免 频繁创建和销毁对象
。
关闭资源:在使用一些需要手动关闭的资源,如文件、数据库连接等时,如果没有及时关闭资源,将会导致内存泄漏问题。可以通过使用finally
块或者try-with-resources语句来确保资源被正确关闭,例如:
try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
根据实际情况
进行内存优化,可以通过 使用jstat等工具 来监控程序运行中的内存使用情况。 例如 可以通过设置JVM参数
来限制内存大小,例如:java -Xmx256m MyClass
这表示将JVM最大内存设置为256MB。
该问题将在下一篇中记录!
热门专栏推荐:
持续创作优质好文ing…✍✍✍
记得一键三连哦!!!
求关注!求点赞!求个收藏啦!