2009-01-08 8 views
17

क्या कोई जावा वीएम है जो अपने राज्य को फ़ाइल में सहेज सकता है और फिर उस स्थिति को फिर से लोड कर सकता है?क्या कोई जावा वीएम है जो अपने राज्य को फ़ाइल में सहेज सकता है और फिर उस स्थिति को फिर से लोड कर सकता है?

यदि हां, तो कौन सा?

उत्तर

10

एक अन्य विकल्प, जो आपके मामले में प्रासंगिक हो सकता है या नहीं हो सकता है, वर्चुअल मशीन के अंदर JVM (किसी भी JVM) को चलाने के लिए है। अधिकांश वर्चुअल मशीनें स्टोर को स्टोर और फिर से शुरू करने का विकल्प प्रदान करती हैं, इसलिए अपने पीसी को पुनरारंभ करने में सक्षम हो, बैक अप लेने पर वीएम को फायर करें और जावा प्रक्रिया को उस स्थान से उठाएं जहां से यह था।

मैं काम पर आईई पर परीक्षण के लिए वीएमवेयर प्लेयर का उपयोग करता हूं, और जब मैं बंद करता हूं और बाद में इसे फिर से खोलता हूं तो यह उपरोक्त उल्लेख करता है। जब मैं वीएम में कुछ भी नोट कर रहा हूं, तो आमतौर पर ऐसा नहीं होता है, लेकिन जब तक वे किसी भी बाहरी संसाधन (जैसे नेटवर्क सॉकेट) तक नहीं पहुंच रहे हैं, तो मैं उम्मीद करता हूं कि यह काम करेगा जैसे वीएम कभी बंद नहीं हुआ था ।

4

आपको प्रासंगिक डोमेन-विशिष्ट ऑब्जेक्ट्स को क्रमबद्ध करना चाहिए जिसे किसी अन्य JVM रन-टाइम द्वारा डी-सीरियलाइज़ किया जा सकता है।

मुझे किसी भी JVM को बनाए रखने वाले किसी भी उपकरण से अवगत नहीं है। ऐसा करने के लिए मुझे सबसे नज़दीक gcore का उपयोग कर चल रहे जेवीएम प्रक्रिया से कोर डंप बनाना था, फिर jsadebugd, jmap या jstack का उपयोग करके इसे डीबग करने के लिए।

उदाहरण के लिए:

$ jps # get JVM process ID XXX 
$ gcore -o core XXX 
$ jsadebugd $JAVA_HOME/bin/java core.XXX 

अद्यतन

मुझे नहीं लगता कि आप एक समाधान है कि बस अभी तक आर्किटेक्चर के बीच पोर्टेबल है खोजने के लिए जा रहे हैं है।

3

मैंने an embedded Java project पर काम किया है जो इस दृष्टिकोण का उपयोग जल्दी से शुरू करने के लिए किया गया था। जेवीएम पवन नदी से था, जो VxWorks के शीर्ष पर चल रहा था।

2

मेरे ज्ञान के लिए, JVM स्थिति को कैप्चर करने और उसे पुनर्स्थापित करने के लिए कुछ भी नहीं है, लेकिन लोग कुछ समान प्राप्त करने के लिए थ्रेड क्लास को क्रमबद्ध/deserialize करने की कोशिश कर रहे हैं। मुझे मिले एक कार्यान्वयन कार्यान्वयन की सबसे नज़दीकी चीज brakes थी, लेकिन जब आप "थ्रेड सीरियलाइजेशन" के लिए Google पर जाते हैं तो आपको और अधिक मिल सकता है।

4

यह ध्यान देने योग्य है कि कई वस्तुओं को क्रमबद्ध नहीं किया जा सकता क्योंकि उनके पास जावा संदर्भ के बाहर राज्य है। उदा। सॉकेट, थ्रेड, ओपन फाइलें, डाटाबेस कनेक्शन। इस कारण से, एक सामान्य तरीके से एक उपयोगी आवेदन की स्थिति को सहेजना मुश्किल है।

3

सन "ओर्थोगोनल हठ" है, जो "पूर्ण कम्प्यूटेशनल मॉडल जावा भाषा विशिष्ट कटियन nedby डी फाई है कि के लिए हठ" प्रदान करता है पर कुछ शोध किया गया है:

http://research.sun.com/forest/COM.Sun.Labs.Forest.doc.opjspec.abs.html

PJama एक प्रोटोटाइप दिया गया है:

http://research.sun.com/forest/opj.main.html

1

तुम सिर्फ अपने इन-स्मृति वस्तुओं के राज्य भंडारण, तो Prevaylor हो सकता है की तरह कुछ के साथ भाग प्राप्त कर सकते हैं आप के लिए काम करता हूं। यह आपके ऑब्जेक्ट्स की स्थिति रिकॉर्ड करने के लिए एक क्रमबद्ध स्नैपशॉट के साथ व्यावसायिक ऑब्जेक्ट्स में जर्नलिंग परिवर्तनों के संयोजन का उपयोग करता है, जिसे आप बाद में पुनः लोड कर सकते हैं।

हालांकि, यह पूर्ण जेवीएम स्थिति (कॉल स्टैक, जीसी स्थिति आदि) को स्टोर नहीं करता है। यदि आपको वास्तव में विस्तार के उस स्तर की आवश्यकता है, तो एक विशेष JVM की आवश्यकता हो सकती है।

4

मुझे JVM की जानकारी नहीं है जो राज्य को स्टोर कर सकता है। आपकी सटीक जरूरतों के आधार पर, आप टेराकोटा का उपयोग करने पर विचार कर सकते हैं। टेराकोटा अनिवार्य रूप से JVM के बीच ढेर स्थिति साझा करने में सक्षम है, और इस स्थिति को डिस्क पर संग्रहीत करता है।

इसका उपयोग क्लस्टर अनुप्रयोगों के लिए किया जा सकता है, और/या हेपस्टेट लगातार बना सकता है। असल में, आप इसका उपयोग JVM को शुरू करने के लिए कर सकते हैं और जहां आपने छोड़ा था वहां उठा सकते हैं। अधिक जानकारी के लिए जांचें: http://www.infoq.com/articles/open-terracotta-intro

आशा है कि इससे मदद मिलती है।

4

Continuations संभव है कि आप के लिए देख रहे हो रहे हैं:

[...] प्रथम श्रेणी निरंतरता है, जो निर्माणों कि एक प्रोग्रामिंग भाषा किसी भी बिंदु पर निष्पादन राज्य को बचाने के लिए क्षमता दे रहे हैं और कार्यक्रम में बाद के बिंदु पर पर उस बिंदु पर वापस आएं। RIFE continuations और javaflow:

जावा के लिए कम से कम दो निरंतरता पुस्तकालयों रहे हैं। मुझे पता है कि javaflow कम से कम डिस्क पर serializing राज्य की अनुमति देता है: यदि सभी वस्तुओं पर कब्जा कर लिया भी serializable है

एक Continuation धारावाहिक जा सकता है। दूसरे शब्दों में, सभी स्थानीय चर (सभी this ऑब्जेक्ट्स सहित) को Serializable के रूप में चिह्नित करने की आवश्यकता है। इस उदाहरण में, आप को MyRunnable क्लास को Serializable के रूप में चिह्नित करने की आवश्यकता है। एक धारावाहिक निरंतरता पर दूसरी मशीन या बाद में उपयोग की जा सकती है। - Javaflow Tutorial

+0

दल्मा (https://dalma.dev.java.net/) स्पष्ट रूप से निरंतरता भी करता है। –

+0

निरंतरताएं शांत हैं और सभी, लेकिन अन्य सामान करने के दौरान बाद में काम के कुछ टुकड़े को बचाने के लिए केवल एक चल रही प्रक्रिया के भीतर काम करते हैं। यह प्रश्न प्रोग्राम और जेवीएम को पहले के राज्य में रीसेट करने के बारे में प्रतीत होता है (संभवतः एक हस्तक्षेप बंद करने के साथ)। –

+0

@ पोंटस गेज: आपने दूसरा उद्धरण नहीं पढ़ा। javaflow निरंतरता ढेर और सब कुछ serialize। वे बाद में डिस्क से पुनः लोड करने योग्य हैं। एक अलग मशीन पर भी। – waqas

2

मैं इसे लेता हूं, जहां से स्नैपशॉट संग्रहीत किया गया था, फिर से शुरू करने में सक्षम होना चाहते हैं, जैसे कि उसके बाद कुछ भी नहीं हुआ था।

मुझे आश्चर्य है कि कितने ढांचे के घटकों और पुस्तकालयों की कार्यक्षमता टूट जाएगी। अचानक, आप भंडारण से एक JVM स्थिति को पुनर्जीवित कर रहे हैं; इस बीच, घड़ी रहस्यमय रूप से 23 घंटों तक आगे बढ़ गई है, नेटवर्क कनेक्शन अब वैध नहीं हैं, जीयूआई ऑब्जेक्ट्स में अब कोई अंतर्निहित ओ/एस हैंडल नहीं है ... मैं कहूंगा कि यह मामूली है, और सामान्य मामले में असंभव है ढांचे को बड़े पैमाने पर संशोधित करना।

+0

वे वही समस्याएं हैं जो आपके ओएस हाइबरनेटिंग या एक वीएम सर्वर को वीएम को रोकते हैं, संभवतः वे संभाले जाएंगे, या अधिक सटीक रूप से संभाले नहीं जाएंगे, वैसे ही। – SCdF

+0

... इस अंतर के साथ कि ओ/एस और ड्राइवर स्टैक्स वास्तव में हाइबरनेशन के बारे में जानते हैं और चीजों को उचित रूप से पैक/अनपैक कर सकते हैं। यहां, JVM को शामिल करने के लिए एक प्रक्रिया बस अस्थिर हो जाती है और सबकुछ काम करने की अपेक्षा करता है ... –

+0

यह वही होता है जब मैं अपना लैपटॉप ढक्कन बंद करता हूं - कंप्यूटर सो जाता है। मैं लैपटॉप ढक्कन खोलता हूं और ऐप जारी रहता है जहां उन्होंने छोड़ा था। हां, अगर मेरे पास ढक्कन बंद करने पर सॉकेट खुला होता है तो सॉकेट बंद हो जाती है। वीएम अलग नहीं होना चाहिए। – jdkoftinoff

1

इस समय उत्तर कोई है, ऐसे कोई भी JVMs नहीं हैं जो आपके ऑपरेटिंग सिस्टम की तरह 'हाइबरनेट' कर सकते हैं या वीएमवेयर एट अल कैन कर सकते हैं।

आप अपने अनुप्रयोग की जटिलता पर निर्भर करता है, सिर्फ राज्य बाहर serializing जब कार्यक्रम बंद कर देता है और इसे वापस में serializing, लेकिन उस ठहराव की तरह सामान से काम नहीं चलेगा कुछ व्यापार तर्क को क्रियान्वित करते हुए वहाँ आधे रास्ते मिल सकता है, जब आप बंद करते हैं और फिर इसे तब खोलते हैं जब आप इसे फिर से खोलते हैं।