如何访问 PySpark 应用程序中预留的用户内存?
我猜测这在 PySpark 应用程序中是不可能的,因为这是 JVM 内存的一部分,无法通过 Python 访问。
如果我是正确的,那么在 PySpark 应用程序中不需要为此留出任何内存(因为它不可访问)?
这个问题只是问为什么不使用通用强制转换。关于擦除的问题似乎并不能解释这种边缘情况。
在开始之前,让我先说一下我对类型推断不感兴趣,如下所述:
这只是为了避免混淆。
我感兴趣的是为什么下面的代码可以工作而不会抛出 ClassCastException
?
import java.sql.SQLException;
public class GenericThrows {
static <T extends Exception> void test(Exception d) throws T {
throw (T) d;
}
public static void main(String[] args) {
GenericTest.<RuntimeException>test(new SQLException());
}
}
使用以下命令编译代码:
javac -source 1.7 -target 1.7 GenericThrows.java
它产生:
Exception in thread "main" java.sql.SQLException
at GenericTest.main(GenericTest.java:9)
我对 Java 泛型和类型擦除的心理模型(以及为什么我认为这没有意义):
当静态方法编译时:
static <T extends Exception> void test(Exception d) throws T {
throw (T) d;
}
类型擦除会清除所有泛型类型并将它们替换为给定类型的上限,因此该方法实际上变为:
static void test(Exception d) throws Exception {
throw (Exception) d;
}
我希望我是对的。
main方法编译时:
static <T extends Exception> void test(Exception d) throws T {
throw (T) d;
}
public static void main(String[] args) {
GenericTest.<RuntimeException>test(new SQLException());
}
类型参数被具体类型替换:java.lang.RuntimeException
。
因此该方法实际上变为:
static void test(Exception d) throws RuntimeException {
throw (RuntimeException) d;
}
我希望我是对的。
因此,当我尝试将 a 转换SQLException
为 a时,RuntimeException
我应该得到 a ClassCastException
,这正是如果我编写不带泛型的代码时会发生的情况:
import java.sql.SQLException;
public class NonGenericThrows {
static void test(Exception d) throws RuntimeException {
throw (RuntimeException) d;
}
public static void main(String[] args) {
NonGenericThrows.test(new SQLException());
}
}
编译与执行:
javac -source 1.7 -target 1.7 NonGenericThrows.java
java NonGenericThrows
结果:
Exception in thread "main" java.lang.ClassCastException: class java.sql.SQLException cannot be cast to class java.lang.RuntimeException (java.sql.SQLException is in module java.sql of loader 'platform'; java.lang.RuntimeException is in module java.base of loader 'bootstrap')
at NonGenericThrows.test(NonGenericThrows.java:5)
at NonGenericThrows.main(NonGenericThrows.java:9)
那么为什么通用版本没有给出 ClassCastException ?
我的思维模式哪里出了问题?
我是 Rust 新手,无法理解模块系统和pub
工作原理。
采取以下代码:
fn main() {
Test::test();
}
mod Test {
pub fn test() {
println!("Hello World");
}
}
为什么编译器不给我一个错误,指出这mod Test
是private
?
如果我在测试中声明另一个模块并且不标记它,因为pub
我收到了预期的错误。例如:
fn main() {
Test::inner::test();
}
mod Test {
mod inner {
pub fn test() {
println!("Hello World");
}
}
}
默认情况下,顶级模块可以在声明它们的文件中访问吗?
规则是什么?