① java串行化怎么理解什么是串行化谁能通俗地给我讲讲
首先,这个概念的原文是 Serialization,而串行化这个翻译并不是很好,个人倾向于序列化这个翻译,下面我都会用序列化这个名词。
所谓序列化是指把一个对象通过某种规则转化为一串二进制串,字符串就是一种二进制串。但为何要把对象转化为二进制串呢?因为我们需要保存或者在网络上传输它们,而存在于 JVM 内存中的对象并没有使用者可见的二进制形式。虽然内存中的所有东西仍然是二进制的,但 JVM 向我们屏蔽了内存操作相关的信息,我们不一定能确定某个 JVM 实现是如何在内存中存储和组织一个 Java 对象的内容的(C/C++ 就可以直接获取内存块来作为序列化的二进制串)。
当然,光序列化是不够的,我们还需要反序列化,也就是如何从二进制串重新转回对象。这样当我们从文件中读取或者在网络的另一头收到某个对象的二进制串之后,我们才能重新还原回那个对象。
Java 默认实现了自己的序列化,就是使用的内存数据。然而除了 Java 自己的序列化,我们还有很多中序列化方式,例如 hessian。或者说将 Java 对象转成 json、xml 也是一种序列化。
举一个非常简单的例子,例如我们有一个对象 Integer v = 1;。当我们使用 hessian 对其序列化的时候,我们可能会拿到 I1 这样的字串(并不确定 hessian 生成的串是不是真的是这样,但是也差不多),其中 i 表示类型是 Integer,而 1 就是这个变量的值,而 I1 就是序列化后的二进制串(一个字符串)。
② java中怎么解决并行计算问题
如果是单节点的,利用多线程的就可以了。mpi一般使用在多节点上的,就是好几个工作站一起计算的时候
③ 在JAVA中并行和并发机制的区别
并发与并行是两个既相似而又不相同的概念:并发性,又称共行性,是指能处理多个同时性活动的能力;并行是指同时发生的两个并发事件,具有并发的含义,而并发则不一定并行,也亦是说并发事件之间不一定要同一时刻发生。
-------------------------------------------------------------
并发和并行的区别仅仅在发生时刻的不同吗?
举个例子理解一下,如:
假设有A、B 两个事件
并行:
如果A和B都在15:30同时发生,A 的运行时间为 5 分钟,B 的运行时间为 8 分钟
在前5分钟是并行,也包括并发,因为他们都是在同一时刻发生的
并发:
如果A在15:30发生,运行3分钟后,B事件发生,在以后的5分钟时间里,A和B 是并发的
-------------------------------------------------------------
并发,是在同一个cpu上同时(不是真正的同时,而是看来是同时,因为cpu要在多个程序间切换)运行多个程序。
并行,是每个cpu运行一个程序。
打个比方,并发,就像一个人(cpu)喂2个孩子(程序),轮换着每人喂一口,表面上两个孩子都在吃饭。
并行,就是2个人喂2个孩子,两个孩子也同时在吃饭。
④ Java 并行线程
楼主这个问题是典型的生产者/消费者问题。
如果你采用了数据库,那么,可以将文件名存储在数据库中,然后转换的程序就循环扫描这个表,然后进行处理。
如果没有使用数据库,那么,字节写一个容器,进行数据的存储处理,如果不想使用静态属性,可以采用单例模式来完成。
这儿只提供思路,就不贴代码了,如果楼主有不清楚的,可以单独交流
⑤ 提高Java性能的几个高效用法
1.循环
■ 在重要的循环里,消除循环终止判断时的方法调用。。。
例如:将...
for( int i = 0; i < collection.size(); i++){
...
}
替换为…
for( int i = 0; n = collection.size(); i < n; i++){
...
}
通常,把与循环index不相关的移到循环的外面
for( int i = 0; terminal = x.length; i < terminal; i++){
X[i] = x[i] / scaleA * scaleB
}
应该该成:
Double scale = scaleb / scaleA;
for( int i = 0; terminal = x.length; i < terminal; i++){
X[i] = x[i] * scale
}
2.字符串
■ 消除字符串连接
■ 创建长字符串时,总是使用StringBuffter代替String
■ 预先分配StringBuffer空间
StringBuffer sb = new StringBuffer(5000);
3.基本数据类型
■ 在重要的循环里使用基本数据类型(int型数据通常比long/double型数据更快)
■ 基本数据类型(Boolean,Integer,etc)的包装类主要用在当传递的方法参数必须是一个对象的引用时(而不是一个基本数据类型)
■ 对所有的常量代数表达式使用static final修饰符
一 使常量更容易引用(编译器预先计算常量表达式)
4.异常
■ 异常只用于单个真正的错误条件
一 抛出一个异常和执行一个catch代码块花费是很高的(主要由于当创建一个异常时要获得线程栈的一个快照)
一 只当条件真的异常时才抛出一个异常
■ 使编译器和运行时最优化,将几个方法调用放在一个try/catch块中,而不是为每个方法调用实现几个try/catch块
try{
Some.method1(); //Difficut for javac
} catch (method1Exception e) { //and the JVM runtime
//Handle exception 1// to optimixe this code
}
try{
Some.method2();
} catch (method2Exception e) {
// Handle exception 2
}
try{
Some.method3();
} catch (method3Exception e) {
// Handle exception 3
}
try{
Some.method1();
Some.method2();
Some.method3(); // easier to optimize
} catch (method1Exception e) {
// Handle exception 1
} catch (method2Exception e) {
// Handle exception 2
} catch (method3Exception e) {
// Handle exception 3
}
5.基准
■ 注意,所有这些技巧会因不同的平台和虚拟机而不同
一 例如:在有些servlet容器内,通过一个OutputStream作为字节输出会更快
一 在其它的容器内,通过一个PrintWriter输出字符会更快
■ 这些技巧描述的是最可移植的建议
■ 你可能需要运行一些基准来判断在你的平台上怎么样是最快的
⑥ java 类的串行化问题
用了未经检测或不安全操作 跟你的串行没关系 可能是你用的1.5或1.6的JDK 是提示你那个Vector要使用泛型对象 Vector 改为Vector<Plan>就可以啦
⑦ java,什么叫串行化
把一个对象变成01串,然后在需要的地方重新恢复成对象。比如可以将对象保存在文件,然后再读出。可以将一个对象通过网络传输。
⑧ JAVA中的多线程能在多CPU上并行执行吗注意,我说的不是并发执行哦
你的思路是对的,CPU就是为了迎合操作系统的多线程从而提高系统的计算效率.但是具体分配任务到各个内核中去执行的并非JAVA与JVM而是操作系统.也就是说,你所执行的多线程,可能会被分配到同一个CPU内核中运行.也可能非配到不同的cpu中运行.如果可以控制CPU的分配,那也应该是操作系统的api才能实现的了
⑨ java中并行与并发的区别
并发与并行是两个既相似而又不相同的概念:并发性,又称共行性,是指能处理多个同时性活动的能力;并行是指同时发生的两个并发事件,具有并发的含义,而并发则不一定并行,也亦是说并发事件之间不一定要同一时刻发生。
-------------------------------------------------------------
并发和并行的区别仅仅在发生时刻的不同吗?
举个例子理解一下,如:
假设有a、b
两个事件
并行:
如果a和b都在15:30同时发生,a
的运行时间为
5
分钟,b
的运行时间为
8
分钟
在前5分钟是并行,也包括并发,因为他们都是在同一时刻发生的
并发:
如果a在15:30发生,运行3分钟后,b事件发生,在以后的5分钟时间里,a和b
是并发的
-------------------------------------------------------------
并发,是在同一个cpu上同时(不是真正的同时,而是看来是同时,因为cpu要在多个程序间切换)运行多个程序。
并行,是每个cpu运行一个程序。
打个比方,并发,就像一个人(cpu)喂2个孩子(程序),轮换着每人喂一口,表面上两个孩子都在吃饭。
并行,就是2个人喂2个孩子,两个孩子也同时在吃饭。