本文目錄一覽:
- 1、Java開發工具IBM的Visual Age for Java有哪些優勢?
- 2、ibm小型機分區的終端窗口打不開java安全阻止
- 3、IBM為什麼將他的Java開發平台命名為Eclipse(日食)?和Sun公司有關係嗎?
- 4、PALM 680 IBM JAVA 怎麼安裝 有PALMQQ的順便發一下 RAM在哪 怎麼將軟件安裝到內存里……
- 5、誰說IBM Java 7不提供Windows X86-64版
- 6、IBM Java如何做到高性能GC的實現內幕
Java開發工具IBM的Visual Age for Java有哪些優勢?
簡述Java開發工具IBM的Visual Age for Java
Visual Age for Java是一個非常成熟的開發工具,它的特性以於IT開發者和業餘的Java編程人員來說都是非常用有用的。它提供對可視化編程的廣泛支持,支持利用CICS連接遺傳大型機應用,支持EJB的開發應用,支持與Websphere的集成開發,方便的bean創建和良好的快速應用開發(RAD)支持和無文件式的文件處理。
IBM為建設Web站點所推出的WebSphere Studio Advanced Edition及其包含的 for Java Professional Edition軟件已全面轉向以Java為中心,這樣,Java開發人員對WebSphere全套工具的感覺或許會好了許多。Studio所提供的工具有:Web站點管理、快速開發 JDBC頁嚮導程序、編輯器和語法檢查等。這確實是個不錯的站點頁面編輯環境。Studio和集成度很高,菜單中提供了在兩種軟件包之間快速移動代碼的選項。這就讓使用Studio的Web頁面設計人員和使用的Java程序員可以相互交換文件、協同工作。
Visual Age for Java支持團隊開發,內置的代碼庫可以自動地根據用戶做出改動而修改程序代碼,這樣就可以很方便地將目前代碼和早期版本做出比較。與Visual Age緊密結合的Websphere Studio本身並不提供源代碼和版本管理的支持,它只是包含了一個內置文件鎖定系統,當編輯項目的時候可以防止其他人對這些文件的錯誤修改,軟件還支持諸如 Visual SourceSafe這樣的第三方源代碼控制系統。Visual Age for Java完全面向對象的程序設計思想使得開發程序非常快速、高效。你可以不編寫任何代碼就可以設計出一個典型的應用程序框架。Visual Age for Java作為IBM電子商務解決方案其中產品之一,可以無縫地與其他IBM產品,如WebSphere、DB2融合, 迅速完成從設計、開發到部署應用的整個過程。
Visual Age for Java獨特的管理文件方式使其集成外部工具非常困難,你無法讓Visual Age for Java與其他工具一起聯合開發應用。
現在常用的Java項目開發環境有:JBuilder、 for Java、Forte for Java, Visual Cafe、Eclipse、NetBeans IDE、JCreator +J2SDK、jdk+記事本、EditPlus+ J2SDK等等。一般開發J2EE項目時都需要安裝各公司的應用服務器(中間件)和相應的開發工具,在使用這些開發工具之前,我們最好能熟知這些軟件的優點和缺點,以便根據實際情況選擇應用。瑭錦學院tj-academy特別提醒廣大Java學習者編程工具只是工具,為了方便人們工作而開發的,各有特點,因此瑭錦學院tj-academy衷心希望大家都能找到自己合適的java 開發工具,選工具主要的依據自己將要從事的領域是什麼,而不是盲目的認為那種工具好,那種工具不好。
ibm小型機分區的終端窗口打不開java安全阻止
系統問題。ibm小型機分區的終端窗口打不開java安全阻止是系統問題導致,重新啟動即可。Java是一門面向對象的編程語言,不僅吸收了C++語言的各種優點,還摒棄了C++里難以理解的多繼承。
IBM為什麼將他的Java開發平台命名為Eclipse(日食)?和Sun公司有關係嗎?
其實這個嘛,說起來也還是有點淵源的。
搞軟件的人大概都知道現在軟件行業做大的有3巨頭!微軟、IBM、和SUN公司。
所以就不可避免的存在一些競爭,因此把自己的東西命名為和對手有一定關係,還是可以理解的!eclipse的意思就是使什麼暗淡無光,也包含有一些打敗sun公司的意思!
PALM 680 IBM JAVA 怎麼安裝 有PALMQQ的順便發一下 RAM在哪 怎麼將軟件安裝到內存里……
RAM是老Palm時代的叫法。後來palm os升級,機身存儲即使斷電也不會丟失數據,相當於PC上的硬盤。但是RAM的叫法被沿用下來。
IBM Java是palm os上的java 虛擬機(虛擬環境)。必須安裝它才可以使用一些java改造成的palm os 應用程序。比如 UCWEB等。
palm 的QQ推薦用原生的,雖然功能簡陋,但很穩定。建議去 煮機網 等論壇下載。
至於安裝軟件的方法,有多種。最方便的是將 軟件放到 存儲卡上,然後用 文件瀏覽器(建議 resco explorer等,去煮機網或吹友吧下載)將 軟件 複製到ram里。
resco explorer的視圖界面左側是個目錄樹,裡面可以看到ram的。
同理,將IBM Java這個虛擬機複製到ram里。
誰說IBM Java 7不提供Windows X86-64版
找Windows版本的IBM JDK 7,居然沒有, google了一下,IBM從JDK6開始就不再提供相關SDK的windows版本下載。
怎麼辦?Windows版本下的Eclipse。。。。
最後被我找到了,IBM DW上提供的IBM_DevelopmentPackage_for_Eclipse_Win_X86_64_4.3.0下載下來。解壓後發現了SDK 7.0
C:\Users\jamin\Desktop\eclipseDevelopmentPackage\ibm_sdk70\binjava -version
java version “1.7.0”
Java(TM) SE Runtime Environment (build pwa6470sr4-20130207_01(SR4))
IBM J9 VM (build 2.6, JRE 1.7.0 Windows 7 amd64-64 Compressed References 20130205_137358 (JIT enable
d, AOT enabled)
J9VM – R26_Java726_SR4_20130205_1656_B137358
JIT – r11.b03_20130131_32403
GC – R26_Java726_SR4_20130205_1656_B137358_CMPRSS
J9CL – 20130205_137358)
JCL – 20130202_02 based on Oracle 7u13-b08
C:\Users\jamin\Desktop\eclipseDevelopmentPackage\ibm_sdk70\bin
哈哈,分享給大家這個好用的東西作為周末甜點呵呵。
PS:一般情況下MQ for Windows的新版本中都有JDK的IBM最新版,因此可以去參考 MQ 7.5中的文件夾。轉載
IBM Java如何做到高性能GC的實現內幕
IBM JVM的GC分為三個步驟 Mark phase(標記) Sweep phase(清掃) Compaction phase(內存緊縮) 在了解這些過程之前 我們先看一下IBMJava中的對象的Layout和Heap lay out 一個Java對象在IBM vm中的結構如下 size+flags mptr locknflags objectdata size+flags 這是一個 byte的slot( 平台) 這個slot的主要功能就是描述對象的尺寸 由於IBMJava中的對象都是以 byte的倍數分配的 因此對象的尺寸其實就是真實尺寸/ 存放在 byte的slot中 另外在這個slot的低三位是保留字段起到標記對象的作用 他們分別為 bit :swapped bit 這個交換位被用於Compaction phase即內存緊縮階段使用 同時 這一位在標記堆棧溢出的時候(mark stack overflow)也被用於標記NotYetScanned狀態 bit dosed bit 這個位用於標示這個對象是否被某個堆棧或者寄存器reference到了 如果這個標誌被至位則這個對象就不能在當前的GC cycle中被刪除 而且如果某個reference指向的內存不是一個真實的reference比如是一個簡單的float 或者integer變量但是它的值恰巧就是Heap中某個Object的地址的時候 我們就不能修改這個refernece 這種對象的bit 也被置為 bit :pinned bit 標記一個對象是否是一個一個釘扣對象(PINNED object) 一個Pinned Object也不能被GC刪除 因為他們可能在Heap之外被reference到了 典型的一個例子就是Thread 還記得我上面說的僵死縣城么?它不能被刪除的道理就是這個 另外一種PinnedObject就是 JNI Object 即被本地代碼使用的對象 Mptr: 在 平台上也是 byte的slot Mptr有兩個功能 如果mptr不是一個數組 則Mptr指向一個方法塊(method block) 你可以通過這個method block來得到一個類塊(class block) 這個類塊 告訴你這個Object是屬於哪個class的實例 method block和class block由Class Loader分配 而不是heap在heap中進行分配 如果mptr是一個數組(Array) mptr包含了這個對象中 數組的元素個數 lockflags 在 平台上也是 byte的slot 但是這個slot只有低 位被用到 bit :是array flag 如果這個位被置位 那麼這個對象就是一個數組同時mptr字段就包含了數組的元素個數 bit 是hashed和moved bit 如果這個位被置位 那麼他就告訴我們這個對象在被hashed以後被刪除了 Object Data 就是這個對象本身的數據 Heap layout: heap top heap limit heap base heap base是heap的起始地址 heap top是heap的結束地址 heaplimit 是當前程序使用的那段heap可以進行擴展和收縮的極限 你可以用 Xmx參數在java運行的時候對heap top和heap base進行控制 Alloc bits 和 mark bits heap top allocmax markemax heap limit alloc size marksize heap base 上面這個結構描述了heap和alloc bits 以及 markbits之間的關係 allocbits和markbits都是元素為 個bit的vector 他們與heap有同樣的長度 下面是兩個對象被分配以後在heap和兩個vector中的表現 heaptop allocmax markmax heaplimit allocsize marksize object top object base object allocbit object markbit object top object base object allocbit 如上面的結構 如果一個對象在heap被alloc出來 那麼在allocbits中就標示出這個對象的起始地址所在的地址 allocbits中只標記起始地址 但是這個過程告訴我們這個對象在那裡被創建 但是不告訴我們這個對象是否存活 當在mark phase中如果某一個對象比如object 仍然存活 那麼就在markbits中對應的地址上標記一下The free list IBM jvm中的空閑塊用用一個free list鏈標示 如圖 freechunck freechunck freechunckn size size size next next next NULL freeStorage freeStorage freeste 有了這些基本概念我們來看看Mark phase的工作情況 MarkPhase GC的Mark phase將標記所有還活着的對象 這個標記所有可達對象的過程稱為tracing Jvm的活動狀態(active state)是由下面幾個部分組成的 每個線程的保存寄存器(saved registers) 描述線程的堆棧 Java類中的靜態元素 以及局部和全局的JNI(Java Native Interface)引用 在Jvm中的方法調用都在C Stack上引發一個Frame 這個Frame包含了 對象實例 為局部變量的assignment結果或者傳入方法的參數 所有這些引用在Tracing過程中都被同等對待 實際上 我們可以把一個線程的堆棧看城一系列 bytes slot的集合 然後對每一個堆棧都從頂向下對這些slot進行掃描 在掃描的過程中都必須校驗每個slot是否指向heap當中的一個真實的對象 因為在前面我就說過 很有可能這些slot值僅僅是一個int或float但是他們的值恰巧就等於heap中的一個對象地址 因此在掃描的時候必須相當的保守 掃描的時候必須保證所有的指針都是一個對象 而且這個對象沒有在GC中被刪除 只有符合下麵條件的slot才是一個指向對象的指針 必須以 byte的倍數分配的內存 必須在heap的範圍之內(即大於heapbase小於heaptop) 對應的allocbit必須置為 滿足這些條件的對象引用我們稱為roots 並且把他們的dosed bit置為 表示不能被GC刪除 我想大家已經知道C#中為何連Int和Float都是OBject的原因了吧 在C#中因為都是OBject因此 在tracing的過程中就減少了一次校驗 這個減少對性能起到很大的影響 如果掃描完成 那麼Tracing過程便能安全精確的執行 也就是說我們可以在roots中通過reference找到他對應的objects 由於他們是真實的reference 那麼我們就能夠在pactionphase中移動對應的對象並且修改這些reference Trace過程使用了一個可以容納 k的slots的stack 所有的引用逐個push進入這個堆棧並且同時在markbits中進行標記 當push和mark的工作完成之後 我們開始pop出這些slot並且進行trace 常規的對象(非數組對象)將通過mptr去訪問clas *** lock clas *** lock將會告訴我們從這個對象中找到的其他對象的reference在那裡?當我們在clas *** lock找到一個refernce以後 如果發現他沒有被mark 那麼我們就在markallocbits中mark他然後把他再壓入堆棧 數組對象利用mptr去訪問每個數組元素 如果他們沒有mark則mark然後壓入堆棧 Trace過程一直持續進行 直到堆棧為空 MarkStack OverFlow 由於markStack限制了尺寸 因此它可能會溢出 如果溢出發生 那麼我們就設定一個全局的標誌來表明發生了MarkStack OverFlow 然後我們將那些不能push入stack的OBject的bit 設定為NotYetScanned 然後當tracing過程完成以後 檢驗全局標誌如果發現有overflow則把NotYetScanned的對象再次壓入堆棧開始新的tracing過程 並行Mark(Parallel Mark) 由於使用逐位清掃(biise sweep)和內存緊縮規避功能 GC將化大部分的時間是用於Mark而非前面兩項 這就導致了IBM JVM需要開發一個GC的並行版本 並行GC的目的不是以犧牲單CPU系統上的效能來換取在 路對稱CPU系統上的高效率 並行Mark的基本思想就是通過多個輔助線程(helper thread)和一個共享工作的工具來減少Marking的時間 在單CPU系統中 執行GC工作的只有一個主線程 Parallel mark仍然需要這個主線程的參與 他充當了管理協調的角色 這個Thread所要執行的工作和單CPU上的一樣多 包括他必須掃描C Stack來鑒別需要收集的roots指針 一個有N路對稱CPU的系統自動含有n 個helper thread並且平均分布在每個CPU上 master thread將scan完的reference集合進行分塊 然後交給helper thread獨立完成mark工作 每個Helper thread都被分配了一個獨立的本地mark stack 以及一個shareable queue sharqueue將存放help thread在mark overflow的時候的NotyetScanned對象 然後由master thread將sharequeue中的對象balance到其他已經空閑的thread上去 並發Mark(Concurrent mark) Concurrent mark的主要目的在於當heap增長的時候減少GC的pause time 只要heap到達heap limit的時候 Concurrent mark就會被執行 在Concurrent phase中 GC要求應用中的每個線程(不是指helper thread而是應用程序自己開啟的線程以便充分利用系統資源)掃描他們自己的堆棧來得到roots 然後使用這些roots來同步的trace 可達對象 Tracing工作是由一個後台的低優先級的線程執行 同時程序自己開啟的線程在分配內存的時候必須執行heap lock allocation 由於使用程序自己開啟的線程並發的執行mark live objects 我們必須紀錄那些已經trace過的object的變化 這個功能是採用一個叫寫閘(write barrier) 來實現的 這個寫閘在每次改變引用的時候被激活 它告訴我們什麼時候一個對象被跟新過了 以便我們從新掃描那部分heap 寫閘的具體實現是Heap會分配出 byte的內存段每個段都分配了一個byte在卡表中(card table) 無論何時一個對象的reference被更新cardtable將同步紀錄這個對象的起始地址 使用Byte而不用bit的原因是寫byte要比寫bit快 倍 而且我們可能希望空餘的bit會在未來被用到 當Concurrent mark執行完畢以後 S collection(stop total world)將會被執行 s的意思是指suspend所有程序自己開啟的線程 因此我們可以看到如果使用Concurrent mark那 lishixinzhi/Article/program/Java/JSP/201311/19555
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/237523.html