【第22期】观点:IT 行业加班,到底有没有价值?

Java笔记分享-CrazyChao(Java重点及补充 序列化 Transient 远程调试 GC原理)

原创 2015年11月18日 22:17:54

Java重点及补充 序列化  Transient  远程调试 GC原理

序列化是什么:

序列化就是将一个对象的状态(各个属性量)保存起来,然后在适当的时候再获得。

序列化分为两大部分:序列化和反序列化。序列化是这个过程的第一部分,将数据分解成字节流,以便存储在文件中或在网络上传输。反序列化就是打开字节流并重构对象。对象序列化不仅要将基本数据类型转换成字节表示,有时还要恢复数据。恢复数据要求有恢复数据的对象实例

序列化的什么特点:

如果某个类能够被序列化,其子类也可以被序列化。声明为static和transient类型的成员数据不能被序列化。因为static代表类的状态, transient代表对象的临时数据。

什么时候使用序列化:

一:对象序列化可以实现分布式对象。主要应用例如:RMI要利用对象序列化运行远程主机上的服务,就像在本地机上运行对象时一样。

二:java对象序列化不仅保留一个对象的数据,而且递归保存对象引用的每个对象的数据。可以将整个对象层次写入字节流中,可以保存在文件中或在网络连接上传递。利用对象序列化可以进行对象的"深复制",即复制对象本身及引用的对象本身。序列化一个对象可能得到整个对象序列。

Java序列化(其它)

Transient

java语言的关键字,变量修饰符,如果用transient声明一个实例变量,当对象存储时,它的值不需要维持。

作用:
Java的serialization提供了一种持久化对象实例的机制。当持久化对象时,可能有一个特殊的对象数据成员,我们不想用serialization机制来保存它。为了在一个特定对象的一个域上关闭serialization,可以在这个域前加上关键字transient。当一个对象被序列化的时候,transient型变量的值不包括在序列化的表示中,然而非transient型的变量是被包括进去的。

java有个特点就是序列化,简单地来说就是可以将这个类存储在物理空间(当然还是以文件的形式存在),那么当你从本地还原这个文件时,你可以将它转换为它本身。这可以极大地方便网络上的一些操作,但同时,因为涉及到安全问题,所以并不希望把类里面所有的东西都能存储(因为那样,别人可以通过序列化知道类里面的内容),那么我们就可以用上transient这个关键字,它的意思是临时的,即不会随类一起序列化到本地,所以当还原后,这个关键字定义的变量也就不再存在。

通常,我们写的程序都要求特定信息能持久存在或保存到磁盘上,以供一个程序使用或用在同一个程序的另一次运行上.这种持久性可以通过几种方式来实现,包括写到数据库中或是利用JAVA为对象序列化提供的支持.不管我们选用什么方法,类实例的持久性都是通过保存类的域的状态来完成的,保存这些状态,以便以后可以对它们进行访问或使用它们来创建相同的实例.然而,有可能并不是所有的域都需要被保存起来.当一个实例被持久化时,其内部的一些域却不需要持久化,则可以用trainsient修饰符告诉编译器指定的域不需要被持久保存.

具体列举。。。。上机调试。。。。

Java远程调试:
1.JDB使用方式命令行执行、可以设置断点(stop at 参数)等(jdb -attache localhost:)
连接上VM之后,可以使用threads命令查看所有线程
参数设置,通过local等命令查看变量值
架包测试执行命令java -cp target(架包名称路径)
2.eclipse图形化界面
通过Run中Debug configuration配置Debug客户端,远程连接VM。
分布式开发需要了解GC(garbage collection)(主要了解后台架构)
主要管理Java heap,定时判断内存是否需要继续存在,内存回收机制。分三个带:young generation,old generation,permanent generation。
111222

management GC  YGC  OGC   Java -cp target..运行测试包
JPS命令可查看Java heap状态
222111
java也有内存泄露问题
垃圾回收(创建用不到的对象,垃圾无法回收,造成内存泄露)
333333
年轻代存放存活时间短的对象,年轻代变老的过程(晋升)
减少年老代GC次数
parallelOldGC多线程并行垃圾回收
444444
用于对时间敏感的应用
555555
对时间敏感
666666
对吞吐率敏感
777777
以下具有四个阶段垃圾回收机制与用户程序并行执行。并不是完全同步。
888888
promotion failure内存不够情况时发生
concurrent mode failure (默认oldgc已经完成)
999888
版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

java序列化之transient

1、transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。 2、被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被t...

Java序列化中transient修饰符的作用

“使用网络传输对象时需要将对象进行序列化,但在某些情况下,需要序列化的对象持有其他对象的引用,出于安全考虑,我们不希望某些对象被序列化,此时就可以使用transient修饰符 标注不被反序列化对象。”
  • fg607
  • fg607
  • 2017-04-26 10:42
  • 56

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

由transient的使用方法切入,谈java序列化

Blog转载自 》》》程序媛想事儿 源url:http://www.cnblogs.com/lanxuezaipiao/p/3369962.html Java transient关...

[疯狂Java]I/O:其它自定义序列化的方法(transient、writeReplace、readResolve、Externalizable)

1. 一种不是很好的排除序列化——transient关键字:     1) 如果你不想让对象中的某个成员被序列化可以在定义它的时候加上transient关键字进行修饰,例如: class A impl...

java 对象序列化 与 静态变量 及 transient

序列化是将对象状态转换为可保持或传输的格式的过程,它也是RMI用来在不同JVM之间传递对象的机制,或者通过方法的参数或者作为一个方法调用的返回值。但有三个例外序列化不需要读或者写入到流: 1. 序...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)