Java开发入门:理解JVM内存模型与数组

需积分: 5 0 下载量 23 浏览量 更新于2024-08-05 收藏 750KB PDF 举报
"Java开发零基础教程的第四天主要讲解了数组的概念以及JVM内存模型。文档涵盖了JVM的不同内存区域,包括程序计数器、本地方法栈、方法区、Java虚拟机栈、Java堆以及垃圾回收器。此外,还详细介绍了数组的定义、初始化及其在Java编程中的应用。" 在Java开发中,数组是一种非常基础且重要的数据结构。数组允许我们存储一组具有相同类型的元素,这对于处理批量数据非常有用。在Day04的学习中,我们了解到: 1. JVM内存模型:Java虚拟机(JVM)按照功能和作用将内存划分为不同的区域,以便高效管理内存资源。 - 程序计数器:记录当前线程正在执行的字节码的行号,用于控制程序的执行流程。 - 本地方法栈:服务于虚拟机中调用的本地(非Java)方法,存储每个本地方法的局部变量。 - 方法区:存储已加载的类信息、常量、静态变量和编译后的代码,进行线程共享。 - Java虚拟机栈:每个方法执行时创建一个栈帧,存储局部变量、操作栈、动态链接和方法出口等信息,方法调用结束,栈帧随之销毁。 - Java堆:所有线程共享,用于存储对象实例和数组,垃圾回收的主要工作区域。 - 垃圾回收器(GC):自动回收不再被引用的对象所占用的内存,避免内存泄漏。 2. 数组定义与特性:数组是一种有序的数据结构,用于存储相同类型的多个元素。每个元素通过索引来定位,索引从0开始。数组的定义语法表明了元素的类型,例如`int[]`表示整型数组,`String[]`表示字符串数组。 3. 数组初始化:在使用数组之前,必须先初始化,即分配内存并为每个元素赋予初始值。初始化有两种方式: - 静态初始化:在声明数组时直接指定每个元素的值。 - 动态初始化:声明数组大小,然后在程序运行时单独赋值。 4. 数组长度的固定性:一旦数组被初始化,其长度即固定,不可改变。如果需要改变元素数量,通常需要创建新的数组并复制原有数据。 理解这些基础知识对于Java初学者来说至关重要,因为它们构成了Java编程的基础,尤其是在处理数据集合和优化内存使用方面。通过深入学习数组和JVM内存模型,开发者能够编写更高效、更可靠的代码。

2023-06-02 23:12:37 WARN NativeCodeLoader:60 - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable Setting default log level to "WARN". To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel). Traceback (most recent call last): File "mysqlTest.py", line 12, in <module> jdbcDF=spark.read.format("jdbc").option("url","jdbc:mysql://localhost:3306/sparktest?useSSL=false").option("driver","com.mysql.cj.jdbc.Driver").option("dbtable","employee").option("user", "root").option("password", "123456").load() File "/usr/local/spark/python/pyspark/sql/readwriter.py", line 172, in load return self._df(self._jreader.load()) File "/usr/local/spark/python/lib/py4j-0.10.7-src.zip/py4j/java_gateway.py", line 1257, in __call__ File "/usr/local/spark/python/pyspark/sql/utils.py", line 63, in deco return f(*a, **kw) File "/usr/local/spark/python/lib/py4j-0.10.7-src.zip/py4j/protocol.py", line 328, in get_return_value py4j.protocol.Py4JJavaError: An error occurred while calling o31.load. : java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at org.apache.spark.sql.execution.datasources.jdbc.DriverRegistry$.register(DriverRegistry.scala:45) at org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions$$anonfun$5.apply(JDBCOptions.scala:99) at org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions$$anonfun$5.apply(JDBCOptions.scala:99) at scala.Option.foreach(Option.scala:257) at org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions.<init>(JDBCOptions.scala:99) at org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions.<init>(JDBCOptions.scala:35) at org.apache.spark.sql.execution.datasources.jdbc.JdbcRelationProvider.createRelation(JdbcRelationProvider.scala:32) at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:318) at org.apache.spark.sql.DataFrameReader.loadV1Source(DataFrameReader.scala:223) at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:211) at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:167) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244) at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357) at py4j.Gateway.invoke(Gateway.java:282) at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132) at py4j.commands.CallCommand.execute(CallCommand.java:79) at py4j.GatewayConnection.run(GatewayConnection.java:238) at java.lang.Thread.run(Thread.java:748)

295 浏览量