python及各个语言特点:
python是一种面向对象/解释型程序设计语言;昵称为胶水语言;常见的应用情形是,用Python快速生成程序的原型,然后对其中有特别要求的部分,用更合适的语言改写;比如3D游戏中的图形渲染模块,性能要求特别高,就可以用C++重写;
python命令要规范,避免使用可能的关键字;eg,thread变量; 字节码解释器是Python的核心;
在Python虚拟机中一个最核心的概念,一切都是对象,也就是说一个整数就是一个对象,一个字符串也是一个对象,其实类型也是一种对象,整数类型是一个对象;
在Python中,每一个Python线程都会有一个线程状态对象与之关联;每一个线程对应的线程状态对象都保存着这个线程当前的PyFrameObject对象,线程的id这样一些信息;
python线程调度意味着Python中的线程实际上就是操作系统所支持的原生线程;而并非如坊间所流传的那样,Python的线程并非原生线程,而是模拟出来的;
python,进程的调度由操作系统负责,python线程的调度就需要自己负责,避免死锁/饥饿/活锁/资源枯竭等情况的发生,这会增加一定的复杂度;
Ruby,动态语言,多线程机制是在语言的实现中模拟了线程及线程调度机制,而并没有使用操作系统本身的线程机制(我们称为原生线程);
python,能够启动一万个线程;线程调度是由python虚拟机负责。
汇编没有线程的概念;c没有面向对象的概念;c++没有虚拟机的概念;java是编译解释执行,有JIT(JustInTime的概念);python是解释执行;
MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发/数据可视化/数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分;
object-c,C语言所衍生出来的语言,继承了C语言的特性,是扩充C的面向对象编程语言;ObjectC是C的超集;Object-c与java相同,仅支持单一父类继承,不支持多重继承;
IOS没有自动垃圾回收机制,垃圾回收是根据引用计数来决定的;计数为0的时会被认为垃圾马上回收掉;
深入理解Java虚拟机:
查看eclipse初始化参数:eclipse目录下,eclipse.ini文件.
查看当前eclipse使用的jre:Windows->Preferences->InstalledJRE;
查看eclipse启动时类加载时间:在对应jdk下,打开到bin目录; $./jps; $jstat -class 7216;#显示加载类数量,大小,时间;
eclipse插件开发:新建插件工程(特定版本才可以newPluginProject),在配置文件META-INF/MANIFEST.MF中,点击Extension页面,添加一个org.eclipse.ui.startup扩展点;
试运行:右键点击Run as->Eclipse Application; 导出插件:右键Export->Deployable plug-ins and fragments;
$javap -version Test; #不需要.class;javap是JDK自带的反汇编器,可以查看java编译器为我们生成的字节码;
$jdb; #debugger,查错工具;
$Javah #产生可以调用Java过程的C过程,或建立能被Java程序调用的C过程的头文件;
OSGi(Open Service Gateway Initiative)技术是面向Java的动态模型系统;OSGI服务平台提供在多种网络设备上无需重启的动态改变构造的功能;
java共计8种基础数据byte(1),short(2),int(4),long(8),float(4),double(8),char(2),boolean;
封箱后对应类型及继承关系:Byte,Short,Integer,Long,Float,Double继承了Number抽象类,实现了Comparable接口;Character,Boolean实现了Serializable, Comparable接口; Number抽象类对数值类型转换做了统一定义.
java内部都是用unicode,英文字符(ASCII码字符)占1个字节,其余的(汉字)占2个字节数; String所占用字节数是根据编码不同而不同;eg."中文",UTF-8,长度为6;"en",UTF-8,长度为2;
java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的;serialVersionUID两种显示的生成方式:1.默认的1L;2.根据类名/接口名/成员方法及属性等来生成一个64位的哈希字段;
序列化,保存在内存中的各种对象的状态; 对象序列化在RMI/Socket/JMS/EJB都有应用; 序列化文件:序列化协议/版本/变量类型描述符;
在堆中,每个对象由四个域构成:对象头,基本类型域,引用类型域,填充物; 每个引用类型占用4bytes; 填充物,每个对象占用的总空间是以8的倍数计算的;
JVM版本中(Hotspot),对象头占用的字节数:一个普通对象,占用8bytes; 数组,占用12bytes,包含普通对象的8bytes+4bytes(数组长度);
对象头的作用是用来记录一个对象的实例名字/ID和实例状态(eg.当前实例是否可到达,或者当前锁的状态等等;
JVM根本就没有把Object放入堆中.eg.一个小的thread-local对象存在于栈中,而不是在堆中; 被Object占用内存的大小依赖于Object的当前状态.eg.Object的同步锁是否生效,或者,Object是否正在被回收;
编程语言概念:
动态语言:程序在运行时可以改变其结构; 新的函数可以被引进,已有的函数可以被删除等在结构上的变化; JavaScript/Ruby/Python;
编译型语言,C/C++,Pascal/ObjectPascal(Delphi),VB; 程序执行速度快,同等条件下对系统要求较低; 开发操作系统/大型应用程序/数据库系统等;
解释性语言,Java,JavaScript,VBScript,Perl,Python; 对速度要求不高,对不同系统平台间的兼容性有一定要求的程序; 开发网页脚本,服务器脚本,辅助开发接口等;
Java/.net/C#,折中方案,先编译,在解释执行; java号称"一次编译,到处执行",而.net则是"一次编码,到处编译";
动态类型语言,在运行期间才去做数据类型检查的语言; eg.Python,Ruby;
静态类型语言,数据类型是在编译其间检查; 执行效率高;C#/java;
动态类型语言与静态类型语言区分,套用一句流行的话就是:Static typing when possible, dynamic typing when needed;
强类型定义语言,强制数据类型定义的语言; 强类型定义语言是类型安全的语言; 指需要进行变量/对象类型声明的语言,一般情况下需要编译执行; eg.C/C++/Java/C#;
弱类型定义语言,数据类型可以被忽略的语言; 一个变量可以赋不同数据类型的值; 指不需要进行变量/对象类型声明的语言,一般情况下不需要编译(但也有编译型的);eg.PHP/ASP/Ruby/Python/Perl/ABAP/SQL/JavaScript/UnixShell等等;
"这门语言是不是动态类型语言"与"这门语言是否类型安全"之间是完全没有联系的;
eg.Python是动态类型语言,是强类型定义语言(类型安全的语言); VBScript是动态类型语言,是弱类型定义语言(类型不安全的语言); JAVA是静态类型语言,是强类型定义语言(类型安全的语言);
静态类型语言+强类型语言,IDE可以做到很好的代码感知能力,因为有IDE的撑腰,所以开发大型系统,复杂系统比较有保障;
进程的最大线程数目取决于3个因素:线程堆栈大小、进程的最大内存和操作系统位数;
$cat /proc/sys/kernel/threads-max; #查看系统默认值的线程数目;
$ulimit -s; #调整栈大小;
$echo xxx > /proc/sys/kernel/threads-max; #修改默认值;