前情回顾:
在大多数领域,
与决心相比,
天赋被高估了。
时间长了,
决心就是你的天赋。
作者主页: 追光者♂
个人简介:
[1] 计算机专业硕士研究生
[2] 2022年度博客之星人工智能领域TOP4
[3] 阿里云社区特邀专家博主
[4] CSDN-人工智能领域优质创作者
[5] 预期2023年10月份 · 准CSDN博客专家
- 无限进步,一起追光!!!
感谢大家 点赞 收藏⭐ 留言!!!
本文,针对Java API文档进行了简要的介绍说明并给出了目前来讲较为标准地中文档jdk 1.6 中文文档。随后详细介绍了Java核心机制——JVM,具体地结合JVM两个强大的功能来介绍,并针对热门的Java面试题——Java内存泄漏与内存溢出 给出了专业且详尽的解释。此外简单总结了Java编程语言的优缺点。最后初步通过一道问答题验证了一下GPT3.5。文章书写与整体分析不易,求关注!求个点赞呀!持续分享更多干货知识!
API(Application Programming Interface
,应用程序接口)是一种 软件接口,它允许不同的应用程序之间进行交互、访问或共享数据、服务和功能。
API是一组定义、协议和工具,用于构建应用程序和软件组件,以简化应用程序开发和提高开发效率。
它提供了一种标准化的方式 来访问数据和进行各种操作,使得不同的系统之间 可以相互通信,并且 可以轻松地实现数据流、应用程序集成、自动化流程和服务的开发。
常见的API类型包括Web API(基于Web的API)、桌面应用程序API、操作系统API、库API和设备驱动程序API等。
Java API 文档获取:
以上均是英文版的。
目前来讲,jdk1.6 的中文API文档 翻译的是比较好的,在Java基础阶段学习的大部分API 基本上 与jdk17相比较 变换不大,基本可以与官网的相对应。
具体地,可以 点我下载jdk1.6 API 中文版
此前,我们曾介绍过JVM:目录1.1.3——JVM。
这里再简单说一下。
JVM是Java虚拟机(Java Virtual Machine)的简称,它是Java语言平台的核心组成部分。
它的主要作用 就是将Java代码 翻译成特定计算机硬件指令,实现跨平台执行,也就是说,一个Java程序可以在任何安装有Java虚拟机的系统上运行
这种机制 能够实现Java语言的“一次编写,到处运行”的特性,避免了 在每种不同的计算机平台上单独编译程序的繁琐工作。
简言之,JVM相当于一个虚拟计算机,它提供了Java运行的环境和支持,使得Java程序能够在不同的操作系统和硬件上运行。
JVM(Java Virtual Machine ,Java虚拟机):是一个虚拟的计算机,是Java程序的运行环境。JVM具有指令集并使用不同的存储区域,负责执行指令,管理数据、内存、寄存器。
下面介绍一下JVM具有的两个强大功能。
我们编写的Java代码,都运行在JVM 之上。正是因为有了JVM,才使得Java程序具备了跨平台性。
自动内存管理,此处体现为两个方面,其一是内存自动分配
,其二是内存自动回收
。
数据的分配
、存储
等都由JVM来完成减少了
因为没有释放空间而导致的内存泄漏
。
问题:Java程序 会出现内存溢出和内存泄漏问题吗?
——答案是: Yes!
Java程序同样也会存在内存溢出和内存泄漏问题。
内存溢出是指
Java程序在申请内存时,JVM对内存分配的控制不足造成的
,当程序需要的内存 超出了JVM的分配能力时 会抛出OutofMemoryError异常,导致程序崩溃,这种问题通常是由于程序中存在大量的对象,而这些对象 无法被垃圾回收机制正确回收释放造成的。
而内存泄漏则
是指程序中的对象或变量 一直保持着对内存的占用,无法被垃圾回收机制正确释放 导致内存逐渐被耗尽
。这种问题 通常是由于程序中存在一些组件 或类的初始化和释放不当,或者存在一些循环引用等问题。
为了避免内存溢出和内存泄漏等问题,可以尝试使用Java内置工具或一些第三方工具如Eclipse内存分析工具(MAT),JProfiler等进行内存分析和监控,以及规范开发过程,正确使用和释放对象等。
内存泄漏和内存溢出 都是关于内存申请与释放的问题。在Java程序中,内存泄漏 是指程序中的对象或变量一直被占用,无法被垃圾回收机制释放,导致内存逐渐被占满的问题。而内存溢出 则是指Java堆内存不够用,无法为新的对象分配内存,导致OutOfMemoryError异常的问题。
具体来说,内存泄漏发生时,对象占用的内存 没有得到及时的释放,导致Java堆中存储的对象越来越多,而堆的大小是有限的。随着内存泄漏的持续发生,Java堆内的可用内存将逐渐减少,直到 无法为新的对象分配足够的内存。当Java堆的内存不足时,就会发生内存溢出。
Java中常见的内存泄漏问题:
静态集合类
:如果在应用中 声明并操作了一个静态的集合类,但没有 正确管理该集合中的对象的引用,则可以造成内存泄漏。
垃圾回收器引用
:如果垃圾回收期被明确地保留在应用程序中(例如,被保存为静态成员变量),则可能会导致内存泄漏。
内部类引用外部类
:当一个匿名内部类被创建时,它通常会包含对外部类的引用,如果这个匿名类没有正确地释放,则会导致外部类的内存泄漏。
大量的字符串
:在Java中,字符串是不可变的,当程序的运行需要大量的字符串时,除非使用String intern()方法,否则可能造成内存泄漏。
过度的同步
:在多线程的应用程序中,如果在同步代码块中,使用的锁范围太大,可能会造成内存泄漏,因为锁的范围太大时,被锁定的对象不能被及时释放。
不正确的资源关闭
:如果程序没有正确地关闭使用的资源(如文件、数据库连接等),就可能导致内存泄漏。
以上这些 是Java中比较常见的内存泄漏问题,开发者们应该注意及时修复这些内存泄漏问题,以避免内存溢出等内存相关的问题。
众所周知,Java的确 从C语言和C++语言继承了许多成份,甚至可以将Java看成是 类C语言发展和衍生的产物。所谓——“青出于蓝,而胜于蓝”。
Write once , Run Anywhere
”。针对不同的操作系统,java(开发)的架构是不会变化的。 因为 Java是一种跨平台的编程语言,它的设计初衷 就是可在不同操作系统、计算机架构和硬件平台上运行。因此,Java的架构 不会因为操作系统的不同而有所变化。Java的跨平台实现 主要是通过 Java虚拟机(JVM) 和字节码来实现的。
Java虚拟机 提供了一个标准的接口,它将Java字节码 转换为本地机器语言,使得Java程序 可以在任何操作系统上运行。虚拟机 负责提供Java API的实现,同时在应用程序和操作系统之间提供了一个中间层。
由于Java字节码 是独立于操作系统的,所以 Java源码 只需要编写一次 并编译成字节码 即可在任意操作系统上运行。 因此,Java的架构在各个操作系统平台上基本相同,只需在每个平台上安装适当版本的JVM,即可运行Java程序。
各个操作系统上的JVM是不一样的,而JVM又是包含于jdk之中的,因此各个系统的jdk自然也是不一样的。故而安装jdk的时候,要根据具体的操作系统 来安装与之相匹配的jdk。
此外,Java还具有如下特性(包括 但不限于下述)
1. 面向对象性:
面向对象是一种程序设计技术,非常适合大型软件的设计和开发
。面向对象编程 支持封装、继承、多态等特性,让程序更好达到高内聚
,低耦合
的标准。
2. 健壮性: Java 吸收了C/C++语言的优点,但去掉了其影响程序健壮性的部分(如指针、内存的申请与释放等),提供了一个相对安全的内存管理和访问机制
。
3. 安全性高:
Java 适合于网络/分布式环境,需要提供一个安全机制以防恶意代码的攻击。如:安全防范机制
(ClassLoader 类加载器),可以分配 不同的命名空间 以防替代本地的同名类、字节代码检查。
4. 简单性:
Java就是C++语法的简化版
,我们也可以 将Java称之为“C++--
”。比如:头文件,指针运算,结构,联合,操作符重载,虚基类等。
5. 高性能:
Java最初发展阶段,总是被人诟病“性能低
”;客观上讲,高级语言 运行效率总是低于低级语言的,这个无法避免。Java语言本身发展中 通过虚拟机的优化提升了几十倍运行效率
。比如,通过JIT(JUST IN TIME)即时编译技术
提高运行效率。
Java低性能的短腿,已经被完全解决了
。业界发展上,我们也看到很多C++应用开发 转到Java开发,很多C++程序员转型为Java程序员。
语法过于复杂、严谨
,对程序员的约束比较多,与python、php等相比 入门较难。但是一旦学会了,就业岗位需求量大,而且薪资待遇节节攀升
。整个架构会比较重
,对于初创公司开发和维护人员的成本比较高(即薪资高),选择用Java语言开发网站或应用系统 需要一定的经济实力。并非适用于所有领域
。比如,Objective C、Swift在iOS设备上 就有着无可取代的地位。浏览器中的处理 几乎完全由JavaScript掌控。Windows程序 通常都用C++或C#编写。Java在服务器端编程和跨平台客户端应用领域则很有优势。
而如果让你带着批评的观点,来看待 java都有哪些缺点,你可能会这么说:
性能较差:一些开发人员和专家认为,相比较其它编程语言(如C、C++等),Java在性能方面存在对比弱点,因为 Java是一种解释型语言,每次运行 都需要将代码翻译成字节码,因此 性能有时会受到影响
。
资源占用较大:在运行Java程序时,JVM 需要消耗比较多的内存,这可能 会在一些较小的系统上 造成性能问题或资源不足的情况。
过渡依赖于第三方库:Java 拥有广泛的第三方库和框架,但有时候,过渡地 依赖这些库 会导致代码臃肿和混乱,增加开发和维护程序的难度。
代码复杂度高:Java要求程序员写出正确、严谨的代码,这通常会导致较高的代码复杂度和学习曲线。
不过我认为,与Java的缺点比起来,它的优点还是更加友好的。
问:目前最热门的深度学习模型是什么?
它的回答如下图所示:
不知,各位觉得怎样?
持续更新 ing!
喜欢的话,就点个赞!关注我吧!
热门专栏推荐:
持续创作优质好文ing…✍✍✍
记得一键三连哦!!!
求关注!求点赞!求个收藏啦!