ਕੁਸ਼ਲ ਜਾਵਾ ਐਪਲੀਕੇਸ਼ਨਾਂ ਲਈ ਮਾਸਟਰਿੰਗ ਆਬਜੈਕਟ
ਉੱਚ-ਪ੍ਰਦਰਸ਼ਨ ਜਾਵਾ ਐਪਲੀਕੇਸ਼ਨਾਂ, ਬਹੁਤ ਜ਼ਿਆਦਾ ਕੂੜਾ ਕਰਕਟ ਇਕੱਤਰ ਕਰਨ (ਜੀਸੀ) ਦੇ ਜਵਾਬ ਦੇ ਕੇ ਜਵਾਬਦੇਹੀ ਅਤੇ ਥ੍ਰੂਪੁਟ ਨੂੰ ਮਹੱਤਵਪੂਰਣ ਰੂਪ ਨਾਲ ਘਟੀਆ ਕਰ ਸਕਦਾ ਹੈ. ਇਕ ਆਮ ਦੋਸ਼ੀ ਥੋੜ੍ਹੇ ਸਮੇਂ ਲਈ ਆਬਜੈਕਟ ਦੀ ਸਿਰਜਣਾ ਅਤੇ ਨਿਪਟਾਰੇ ਦਾ ਨਿਪਟਾਰਾ ਹੁੰਦਾ ਹੈ, ਜੋ ਕਿ ਜੇ.ਵੀ.ਐਮ ਦੀ ਮੈਮੋਰੀ ਮੈਨੇਜਮੈਂਟ 'ਤੇ ਅਥਾਹ ਦਬਾਅ ਪਾਉਂਦਾ ਹੈ. 🚀
ਇਸ ਮੁੱਦੇ ਨੂੰ ਨਜਿੱਠਣ ਲਈ, ਡਿਵੈਲਪਰ ਅਕਸਰ ਆਬਜੈਕਟ ਪੂਲਿੰਗ-ਇਕ ਤਕਨੀਕ ਵੱਲ ਮੁੜਦੇ ਹਨ ਜੋ ਲਗਾਤਾਰ ਅਲਾਟ ਕਰਨ ਅਤੇ ਉਨ੍ਹਾਂ ਨੂੰ ਨਿਰੰਤਰ ਅਲਾਟ ਕਰਨ ਅਤੇ ਨਿਪਟਾਰੇ ਦੀ ਬਜਾਏ ਚੀਜ਼ਾਂ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹਨ. ਚੰਗੀ ਤਰ੍ਹਾਂ ਨਾਲ ਬਣਤਰ ਆਬਜੈਕਟ ਪੂਲ ਨੂੰ ਲਾਗੂ ਕਰਕੇ, ਐਪਲੀਕੇਸ਼ਨ ਜੀ ਸੀ ਗਤੀਵਿਧੀ ਨੂੰ ਘੱਟ ਕਰ ਸਕਦੇ ਹਨ, ਮੈਮੋਰੀ ਟੁਕੜੇ ਨੂੰ ਘਟਾਉਂਦੇ ਹਨ, ਅਤੇ ਰੰਨਟਾਈਮ ਕੁਸ਼ਲਤਾ ਨੂੰ ਬਿਹਤਰ ਬਣਾਉਂਦੇ ਹਨ, ਅਤੇ ਰਨਟਾਈਮ ਕੁਸ਼ਲਤਾ ਨੂੰ ਬਿਹਤਰ ਬਣਾਉਂਦੇ ਹਨ.
ਹਾਲਾਂਕਿ, ਸਾਰੀਆਂ ਆਬਜੈਕਟ ਪੂਲਿੰਗ ਰਣਨੀਤੀਆਂ ਬਰਾਬਰ ਨਹੀਂ ਬਣੀਆਂ. ਚੁਣੌਤੀ ਇੱਕ ਪੂਲ ਨੂੰ ਡਿਜ਼ਾਈਨ ਕਰਨ ਵਿੱਚ ਹੈ ਜੋ ਆਰਜੀ ਤੌਰ ਤੇ ਐਪਲੀਕੇਸ਼ਨ ਲੋਡ ਦੇ ਨਾਲ ਸਕੇਲ, ਬੇਲੋੜੀ ਆਬਜੈਕਟ ਚੂਰ ਨੂੰ ਰੋਕਦਾ ਹੈ, ਅਤੇ ਕੂੜੇ ਦੇ ਉਤਪਾਦ ਵਿੱਚ ਯੋਗਦਾਨ ਪਾਉਣ ਤੋਂ ਰੋਕਦਾ ਹੈ. ਸਹੀ ਪਹੁੰਚ ਦੀ ਚੋਣ ਕਰਨਾ ਅਨੁਕੂਲ ਪ੍ਰਦਰਸ਼ਨ ਨੂੰ ਬਣਾਈ ਰੱਖਣ ਲਈ ਮਹੱਤਵਪੂਰਨ ਹੈ.
ਇਸ ਤੋਂ ਇਲਾਵਾ, ਅਟੱਲ ਆਬਜੈਕਟਸ, ਜਿਵੇਂ ਕਿ ਸਤਰ ਉਦਾਹਰਣ, ਵਿਲੱਖਣ ਚੁਣੌਤੀਆਂ ਪੇਸ਼ ਕਰਦੇ ਹਨ ਕਿਉਂਕਿ ਉਨ੍ਹਾਂ ਨੂੰ ਅਸਾਨੀ ਨਾਲ ਦੁਬਾਰਾ ਇਸਤੇਮਾਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ. ਬਦਲਵੇਂ ਦਾਅਵੇਦਾਰਾਂ ਵਰਗੇ ਵਿਕਲਪਿਕ ਰਣਨੀਤੀਆਂ ਨੂੰ ਲੱਭਣਾ ਜਾਂ ਦਖਲ ਅੰਦਾਜ਼ੀ ਕਰਨਾ ਮੈਮੋਰੀ ਅਨੁਕੂਲਤਾ ਲਈ ਇੱਕ ਗੇਮ-ਚੇਂਜਰ ਹੋ ਸਕਦਾ ਹੈ. ਇਸ ਗਾਈਡ ਵਿੱਚ, ਅਸੀਂ ਕੂੜੇ-ਮੁਕਤ ਆਬਜੈਕਟ ਪੂਲ ਨੂੰ ਲਾਗੂ ਕਰਨ ਲਈ ਪ੍ਰਭਾਵਸ਼ਾਲੀ ਤਕਨੀਕਾਂ ਦੀ ਪੜਚੋਲ ਕਰਾਂਗੇ ਅਤੇ ਤੁਹਾਡੀ ਜਾਵਾ ਐਪਲੀਕੇਸ਼ਨ ਦੀ ਕੁਸ਼ਲਤਾ ਨੂੰ ਉਤਸ਼ਾਹਤ ਕਰਨ ਲਈ. ⚡
ਕਮਾਂਡ | ਵਰਤੋਂ ਦੀ ਉਦਾਹਰਣ |
---|---|
BlockingQueue<T> | ਇੱਕ ਧਾਗਾ-ਸੁਰੱਖਿਅਤ ਕਤਾਰ ਜੋ ਮਲਟੀਪਲ ਥ੍ਰੈਡਾਂ ਨੂੰ ਸਿੰਕ੍ਰੋਨਾਈਜ਼ੇਸ਼ਨ ਓਵਰਹੈੱਡ ਤੋਂ ਬਿਨਾਂ ਉਧਾਰ ਲੈਣ ਅਤੇ ਵਾਪਸ ਕਰਨ ਲਈ ਮਲਟੀਪਲ ਥ੍ਰੈਡਾਂ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ. |
LinkedBlockingQueue<T> | ਆਬਜੈਕਟ ਨੂੰ ਲਾਗੂ ਕਰਨ ਲਈ, ਬਹੁਤ ਜ਼ਿਆਦਾ ਕੂੜਾ ਇਕੱਠਾ ਕਰਨ ਤੋਂ ਰੋਕਣ ਲਈ ਕੁਸ਼ਲ ਆਬਜੈਕਟ ਮੁੜ ਵਰਤੋਂ ਨੂੰ ਯਕੀਨੀ ਬਣਾਉਣ ਲਈ. |
ArrayBlockingQueue<T> | ਇੱਕ ਬੰਨਡ ਬਲੌਕਿੰਗ ਕਤਾਰ ਜੋ ਪੂਲ ਵਾਲੀਆਂ ਚੀਜ਼ਾਂ ਦੀ ਸੰਖਿਆ ਨੂੰ ਸੀਮਿਤ ਕਰਕੇ ਬਿਹਤਰ ਯਾਦਦਾਸ਼ਤ ਨੂੰ ਬਿਹਤਰ ਬਣਾਉਣ ਦੀ ਆਗਿਆ ਦਿੰਦੀ ਹੈ. |
AtomicInteger | ਮੌਜੂਦਾ ਪੂਲ ਦੇ ਆਕਾਰ ਦੀ ਥਰਿੱਡ-ਸੁਰੱਖਿਅਤ ਟਰੈਕਿੰਗ ਲਈ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ, ਜਦੋਂ ਰੇਸ ਦੇ ਹਾਲਤਾਂ ਨੂੰ ਰੋਕਦਾ ਹੈ ਤਾਂ ਗਤੀਸ਼ੀਲਤਾ ਨੂੰ ਅਨੁਕੂਲ ਕਰਨ ਵੇਲੇ. |
pool.poll() | ਬਿਨਾਂ ਕਿਸੇ ਰੁਕਾਵਟ ਦੇ ਪੂਲ ਤੋਂ ਪ੍ਰਾਪਤੀ ਅਤੇ ਕੱ plex ਣ, ਜਦੋਂ ਕੋਈ ਆਬਜੈਕਟਸ ਉਪਲਬਧ ਨਹੀਂ ਹੁੰਦੇ. |
pool.offer(obj) | ਪੂਲ ਨੂੰ ਇਕਾਈ ਨੂੰ ਵਾਪਸ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰਦਾ ਹੈ; ਜੇ ਪੂਲ ਭਰਿਆ ਹੋਇਆ ਹੈ, ਤਾਂ ਇਕਾਈ ਨੂੰ ਮੈਮੋਰੀ ਬਰਬਾਦੀ ਨੂੰ ਰੋਕਣ ਲਈ ਰੱਦ ਕਰ ਦਿੱਤਾ ਜਾਂਦਾ ਹੈ. |
factory.create() | ਫੈਕਟਰੀ ਪੈਟਰਨ ਵਿਧੀ, ਜੋ ਕਿ ਨਵੇਂ ਆਬਜੈਕਟ ਤਿਆਰ ਕਰਦੀ ਹੈ ਜਦੋਂ ਤਲਾਅ ਉਪਲਬਧ ਉਦਾਹਰਣਾਂ ਤੋਂ ਬਾਹਰ ਆ ਜਾਂਦਾ ਹੈ. |
size.incrementAndGet() | ਜਦੋਂ ਕੋਈ ਨਵਾਂ ਉਦਾਹਰਣ ਬਣਦਾ ਹੈ ਤਾਂ ਆਬਜੈਕਟ ਦੀ ਗਿਣਤੀ ਨੂੰ ਵਧਾਉਂਦਾ ਹੈ, ਤਾਂ ਸਹੀ ਟਰੈਕਿੰਗ ਯਕੀਨੀ ਬਣਾਓ. |
size.decrementAndGet() | ਜਦੋਂ ਇਕਾਈ ਨੂੰ ਅਲਾਟਮੈਂਟ ਨੂੰ ਖਤਮ ਕਰਨ ਤੋਂ ਰੋਕਿਆ ਜਾਂਦਾ ਹੈ ਤਾਂ ਆਬਜੈਕਟ ਦੀ ਗਿਣਤੀ ਨੂੰ ਘਟਾਉਂਦਾ ਹੈ. |
Java ਦੇ ਜਾਵਾ ਮੈਮੋਰੀ ਮੈਨੇਜਮੈਂਟ ਨੂੰ ਆਬਜੈਕਟ ਪੂਲ ਨਾਲ ਅਨੁਕੂਲ ਬਣਾਉਣਾ
ਜਾਵਾ ਐਪਲੀਕੇਸ਼ਨਾਂ ਵਿੱਚ, ਅਕਸਰ ਆਬਜੈਕਟ ਬਣਾਉਣਾ ਅਤੇ ਤਬਾਹੀ ਬਹੁਤ ਜ਼ਿਆਦਾ ਹੋ ਸਕਦੀ ਹੈ ਕੂੜਾ ਕਰਕਟ ਇਕੱਠਾ ਕਰਨਾ, ਨਕਾਰਾਤਮਕ ਤੌਰ 'ਤੇ ਪ੍ਰਭਾਵਸ਼ਾਲੀ ਪ੍ਰਦਰਸ਼ਨ. ਆਬਜੈਕਟ ਪੂਲਿੰਗ ਤਕਨੀਕ ਵਾਰ ਵਾਰ ਮੈਮੋਰੀ ਨੂੰ ਅਲਾਟ ਕਰਨ ਦੀ ਬਜਾਏ ਉਦਾਹਰਣਾਂ ਦੀ ਬਜਾਏ ਉਦਾਹਰਣਾਂ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਘਾਟੇ ਨੂੰ ਘਟਾਉਣ ਵਿੱਚ ਸਹਾਇਤਾ ਕਰਦੀ ਹੈ. ਪਹਿਲੀ ਸਕ੍ਰਿਪਟ ਇੱਕ ਬੁਨਿਆਦੀ ਆਬਜੈਕਟ ਪੂਲ ਨੂੰ ਲਾਗੂ ਕਰਦੀ ਹੈ ਬੱਲਿੰਗ, ਮਲਟੀ-ਥਰਿੱਡਡ ਵਾਤਾਵਰਣ ਵਿੱਚ ਕੁਸ਼ਲ ਆਬਜੈਕਟ ਦੀ ਮੁੜ ਵਰਤੋਂ ਨੂੰ ਯਕੀਨੀ ਬਣਾਉਣਾ. ਤਲਾਅ ਵਿੱਚ ਆਬਜੈਕਟ ਕਰਨ ਦੁਆਰਾ, ਇਹ ਬੇਲੋੜੀ ਯਾਦਦਾਸ਼ਤ ਦੇ ਸ਼ੇਰ ਨੂੰ ਘੱਟ ਕਰਦਾ ਹੈ ਅਤੇ ਕੂੜਾ ਕੁਲੈਕਟਰ ਨੂੰ ਅਕਸਰ ਟਰਿੱਗਰ ਕਰਨ ਤੋਂ ਪ੍ਰਹੇਜ ਕਰਦਾ ਹੈ. 🚀
ਦੂਜੀ ਸਕ੍ਰਿਪਟ ਇਹ ਸੰਕਲਪ ਨੂੰ ਆਰਜੀ ਤੌਰ 'ਤੇ ਸਕੇਲੇਬਲ ਆਬਜੈਕਟ ਪੂਲ ਪੇਸ਼ ਕਰ ਕੇ ਵਧਾਉਂਦੀ ਹੈ. ਇਸ ਦੀ ਬਜਾਏ ਇੱਕ ਨਿਸ਼ਚਤ ਪੂਲ ਦਾ ਆਕਾਰ ਬਣਾਈ ਰੱਖਣ ਦੀ ਬਜਾਏ, ਇਹ ਮੈਮੋਰੀ ਕੁਸ਼ਲਤਾ ਨੂੰ ਯਕੀਨੀ ਬਣਾਉਂਦੇ ਸਮੇਂ ਮੰਗ ਦੇ ਅਧਾਰ ਤੇ ਵਿਵਸਥਿਤ ਕਰਦਾ ਹੈ. ਦੀ ਵਰਤੋਂ ਪਰਮਾਣੂ ਰੇਸ ਦੀਆਂ ਸਥਿਤੀਆਂ ਨੂੰ ਰੋਕਣ, ਆਬਜੈਕਟ ਦੀ ਨਿਗਰਾਨੀ ਦੀ ਸਹੀ ਟਰੈਕਿੰਗ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ. ਇਹ ਪਹੁੰਚ ਵਿਸ਼ੇਸ਼ ਤੌਰ 'ਤੇ ਉੱਚ-ਲੋਡ ਦ੍ਰਿਸ਼ਾਂ ਵਿੱਚ ਲਾਭਦਾਇਕ ਹੈ ਜਿੱਥੇ ਦਰਬਾਰਾਂ ਦੇ ਉਤਰਾਅ-ਚੜ੍ਹਾਅ ਦੀ ਜ਼ਰੂਰਤ ਹੁੰਦੀ ਹੈ, ਉਹਨਾਂ ਦੇ ਸਰੋਤਾਂ ਤੋਂ ਬਿਨਾਂ ਅਨੁਕੂਲ ਕਾਰਗੁਜ਼ਾਰੀ ਨੂੰ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ.
ਪਸੰਦ ਦੀਆਂ ਕਮਾਂਡਾਂ ਪੋਲ () ਅਤੇ ਪੇਸ਼ਕਸ਼ () ਐਪਲੀਕੇਸ਼ਨ ਨੂੰ ਰੋਕਣ ਤੋਂ ਬਿਨਾਂ ਉਦੇਸ਼ ਦੀ ਉਪਲਬਧਤਾ ਪ੍ਰਬੰਧਨ ਲਈ ਮਹੱਤਵਪੂਰਨ ਹਨ. ਜਦੋਂ ਇਕ ਆਬਜੈਕਟ ਉਧਾਰ ਹੁੰਦਾ ਹੈ, ਤਾਂ ਇਸ ਨੂੰ ਪੂਲ ਤੋਂ ਹਟਾ ਦਿੱਤਾ ਜਾਂਦਾ ਹੈ, ਅਤੇ ਵਾਪਸ ਆ ਜਾਂਦਾ ਹੈ, ਇਸ ਨੂੰ ਦੁਬਾਰਾ ਵਰਤੋਂ ਕੀਤੀ ਜਾਂਦੀ ਹੈ, ਇਸ ਨੂੰ ਭਵਿੱਖ ਦੀ ਵਰਤੋਂ ਲਈ ਉਪਲਬਧ ਕਰ ਸਕਦਾ ਹੈ. ਜੇ ਤਲਾਅ ਖਾਲੀ ਚੱਲਦਾ ਹੈ, ਤਾਂ ਇਕ ਨਵਾਂ ਆਬਜੈਕਟ ਦੀ ਮੰਗ ਕੀਤੀ ਜਾਂਦੀ ਹੈ ਜਦੋਂ ਕਿ ਕੁੱਲ ਆਕਾਰ ਨੂੰ ਯਕੀਨੀ ਬਣਾਉਣਾ ਨਿਸ਼ਚਤ ਰੂਪ ਵਿਚ ਰਹੇ. ਇਹ ਰਣਨੀਤੀ ਮੈਮੋਰੀ ਟੁਕੜੇ ਨੂੰ ਘਟਾਉਂਦੀ ਹੈ ਅਤੇ ਜਵਾਬ ਦੇ ਸਮੇਂ ਵਿੱਚ ਸੁਧਾਰ ਕਰਦੀ ਹੈ. ⚡
ਸਤਰਾਂ ਵਰਗੀਆਂ ਅਟੱਲ ਵਸਤੂਆਂ ਲਈ, ਪੂਲਿੰਗ ਬੇਅਸਰ ਹੈ ਕਿਉਂਕਿ ਉਨ੍ਹਾਂ ਦੇ ਰਾਜ ਦੇ ਸ੍ਰਿਸ਼ਟੀ ਨੂੰ ਸੋਧਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ. ਇਸ ਦੀ ਬਜਾਏ, ਵਰਗੀਆਂ ਤਕਨੀਕਾਂ ਦਖਲ ਜਾਂ ਵਿਸ਼ੇਸ਼ ਕੈਸ਼ਾਂ ਦੀ ਵਰਤੋਂ ਬਾਰੇ ਵਿਚਾਰ ਕੀਤਾ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ. ਕੁਸ਼ਲ ਪੂਲਿੰਗ ਰਣਨੀਤੀਆਂ ਅਤੇ ਗਤੀਸ਼ੀਲ ਸਕੇਲਿੰਗ ਨੂੰ ਲਾਭ ਉਠਾਉਣ ਦੁਆਰਾ, ਜਾਵਾ ਐਪਲੀਕੇਸ਼ਨਾਂ ਕੂੜੇਦਾਨਾਂ ਨੂੰ ਭੰਡਾਰ ਓਵਰਹੈੱਡ ਘਟਾ ਦੇ ਸਕਦੀਆਂ ਹਨ, ਨਿਰਵਿਘਨ ਅਤੇ ਵਧੇਰੇ ਜਵਾਬਦੇਹੀ ਪ੍ਰਦਰਸ਼ਨ ਲਈ ਅਗਵਾਈ ਕਰ ਸਕਦੀਆਂ ਹਨ. ਇਹ ਪਹੁੰਚ ਨਿਸ਼ਚਤ ਕਰਦੇ ਹਨ ਕਿ ਐਪਲੀਕੇਸ਼ਨ ਕੁਸ਼ਲ ਹੈ, ਉੱਚ ਸਹਿਮਤੀ ਅਤੇ ਵੱਖੋ ਵੱਖਰੇ ਕੰਮ ਦੇ ਭਾਰ ਹੇਠ ਵੀ.
ਵਸਤੂਆਂ ਦੇ ਪੂਲਿੰਗ ਦੀਆਂ ਤਕਨੀਕਾਂ ਨਾਲ ਜਾਵਾ ਪ੍ਰਦਰਸ਼ਨ ਨੂੰ ਵਧਾਉਣਾ
ਕੂੜੇ ਦੇ ਭੰਡਾਰ ਨੂੰ ਘਟਾਉਣ ਅਤੇ ਮੈਮੋਰੀ ਵਰਤੋਂ ਨੂੰ ਅਨੁਕੂਲ ਬਣਾਉਣ ਲਈ ਜਾਵਾ ਵਿਚ ਇਕ ਕੁਸ਼ਲ ਆਬਜੈਕਟ ਪੂਲ ਨੂੰ ਲਾਗੂ ਕਰਨਾ.
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
public class ObjectPool<T> {
private final BlockingQueue<T> pool;
private final ObjectFactory<T> factory;
public ObjectPool(int size, ObjectFactory<T> factory) {
this.pool = new LinkedBlockingQueue<>(size);
this.factory = factory;
for (int i = 0; i < size; i++) {
pool.offer(factory.create());
}
}
public T borrowObject() throws InterruptedException {
return pool.take();
}
public void returnObject(T obj) {
pool.offer(obj);
}
public interface ObjectFactory<T> {
T create();
}
}
ਬਿਨਾਂ ਰੱਬਾ ਪੀੜ੍ਹੀ ਦੇ ਗਤੀਸ਼ੀਲ ਆਬਜੈਕਟ ਪੂਲ
ਇੱਕ ਐਡਵਾਂਸਡ ਜਾਵਾ ਆਬਜੈਕਟ ਪੂਲ ਸਥਾਪਨਾ, ਜੋ ਕਿ ਕੂੜਾ ਕਰਕਟ ਇਕੱਤਰ ਕਰਨ ਤੋਂ ਬਿਨਾਂ ਗਤੀਸ਼ੀਲ ਰੂਪ ਵਿੱਚ ਸਕੇਲ ਕਰਦਾ ਹੈ.
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.ArrayBlockingQueue;
public class ScalableObjectPool<T> {
private final ArrayBlockingQueue<T> pool;
private final ObjectFactory<T> factory;
private final AtomicInteger size;
private final int maxSize;
public ScalableObjectPool(int initialSize, int maxSize, ObjectFactory<T> factory) {
this.pool = new ArrayBlockingQueue<>(maxSize);
this.factory = factory;
this.size = new AtomicInteger(initialSize);
this.maxSize = maxSize;
for (int i = 0; i < initialSize; i++) {
pool.offer(factory.create());
}
}
public T borrowObject() {
T obj = pool.poll();
if (obj == null && size.get() < maxSize) {
obj = factory.create();
size.incrementAndGet();
}
return obj;
}
public void returnObject(T obj) {
if (!pool.offer(obj)) {
size.decrementAndGet();
}
}
public interface ObjectFactory<T> {
T create();
}
}
ਜਾਵਾ ਵਿੱਚ ਕੁਸ਼ਲ ਆਬਜੈਕਟ ਲਈ ਤਕਨੀਕੀ ਤਕਨੀਕਾਂ
ਮੁ pubuity ਲੇ ਆਬਜੈਕਟ ਦੀ ਪੂਲਿੰਗ ਤੋਂ ਪਰੇ, ਤਕਨੀਕੀ ਤਕਨੀਕ ਮੈਮੋਰੀ ਪ੍ਰਬੰਧਨ ਅਤੇ ਪ੍ਰਦਰਸ਼ਨ ਨੂੰ ਅੱਗੇ ਅਨੁਕੂਲ ਬਣਾ ਸਕਦੀ ਹੈ. ਇਕ ਅਜਿਹੀ ਪਹੁੰਚ ਲਾਗੂ ਕਰ ਰਹੀ ਹੈ ਥਰਿੱਡ-ਲੋਕਲ ਆਬਜੈਕਟ ਪੂਲ. ਇਹ ਪੂਲ ਪ੍ਰਤੀ ਧਾਗੇ ਨੂੰ ਨਿਰਧਾਰਤ ਕਰਦੇ ਹਨ, ਵਿਵਾਦ ਘਟਾਉਣ ਅਤੇ ਕੈਚੇ ਦੇ ਇਲਾਕਿਆਂ ਵਿੱਚ ਸੁਧਾਰ ਕਰਦੇ ਹਨ. ਇਹ ਵਿਸ਼ੇਸ਼ ਤੌਰ 'ਤੇ ਉੱਚ-ਸਿੱਟੇ ਵਜੋਂ ਐਪਲੀਕੇਸ਼ਨਾਂ ਵਿੱਚ ਲਾਭਦਾਇਕ ਹੈ ਜਿਥੇ ਮਲਟੀਪਲ ਥ੍ਰੈਡ ਅਕਸਰ ਚੀਜ਼ਾਂ ਲਈ ਬੇਨਤੀ ਕਰਦੇ ਹਨ. ਇਹ ਸੁਨਿਸ਼ਚਿਤ ਕਰਕੇ ਕਿ ਹਰ ਥ੍ਰੈਡ ਆਪਣੀ ਖੁਦ ਦੀਆਂ ਚੀਜ਼ਾਂ ਨੂੰ ਜਾਰੀ ਕਰਦਾ ਹੈ, ਐਪਲੀਕੇਸ਼ਨ ਸਿੰਕ੍ਰੋਨਾਈਜ਼ੇਸ਼ਨ ਓਵਰਹੈੱਡ ਅਤੇ ਬੇਲੋੜੀ ਕੂੜਾ ਭੰਡਾਰ ਇਕੱਤਰ ਕਰਨ ਲਈ ਘੱਟ ਕਰਦੀ ਹੈ.
ਇਕ ਹੋਰ ਮਹੱਤਵਪੂਰਨ ਵਿਚਾਰ ਵਰਤ ਰਿਹਾ ਹੈ ਆਲਸੀ ਸ਼ੁਰੂਆਤ ਇਸ਼ਾਰਾ ਕਰਨ ਤੋਂ ਬਚਣ ਲਈ ਜਦੋਂ ਤਕ ਉਨ੍ਹਾਂ ਦੀ ਅਸਲ ਲੋੜ ਨਹੀਂ ਹੁੰਦੀ. ਉਦਾਹਰਣਾਂ ਨਾਲ ਪੂਲ ਨੂੰ ਪਹਿਲਾਂ ਲੋਡ ਕਰਨ ਦੀ ਬਜਾਏ, ਆਬਜੈਕਟ ਮੰਗ 'ਤੇ ਬਣਦੇ ਹਨ ਅਤੇ ਭਵਿੱਖ ਦੀ ਮੁੜ ਵਰਤੋਂ ਲਈ ਸਟੋਰ ਕੀਤੇ ਜਾਂਦੇ ਹਨ. ਇਹ ਤਕਨੀਕ ਦ੍ਰਿਸ਼ਾਂ ਵਿੱਚ ਓਵਰ-ਅਲਾਟਮੈਂਟ ਨੂੰ ਰੋਕਦੀ ਹੈ ਜਿੱਥੇ ਅਰਜ਼ੀ ਦੀ ਵਰਤੋਂ ਲਾਜ਼ਮੀ ਨਹੀਂ ਹੈ. ਹਾਲਾਂਕਿ, ਇਸ ਨੂੰ ਸੰਤੁਲਿਤ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ ਇਹ ਸੁਨਿਸ਼ਚਿਤ ਕਰਨ ਵੇਲੇ ਅਸਾਨੀ ਨਾਲ ਉਪਲਬਧ ਹੁੰਦੇ ਹਨ, ਕਾਰਗੁਜ਼ਾਰੀ ਦੀਆਂ ਰੁਕਾਵਟਾਂ ਤੋਂ ਪਰਹੇਜ਼ ਕਰਦੇ ਹੋ ਅਤੇ ਅਕਸਰ ਆਬਜੈਕਟ ਰੁਕਾਵਟ ਤੋਂ ਪਰਹੇਜ਼ ਕਰਦੇ ਹਨ.
ਵੱਡੀਆਂ ਵਸਤੂਆਂ ਜਾਂ ਸਰੋਤ-ਭਾਰੀ ਮਾਮਲਿਆਂ ਨਾਲ ਸੰਬੰਧਿਤ ਐਪਲੀਕੇਸ਼ਾਂ ਲਈ, ਏਕੀਕ੍ਰਿਤ ਕਮਜ਼ੋਰ ਹਵਾਲੇ ਜਾਂ ਨਰਮ ਹਵਾਲੇ ਲਾਭਕਾਰੀ ਹੋ ਸਕਦਾ ਹੈ. ਇਹ ਹਵਾਲੇ ਜੇਵੀਐਮ ਨੂੰ ਜੇ ਜਰੂਰੀ ਹੋਏ ਤਾਂ ਮੈਮੋਰੀ ਦੀ ਮੁੜ ਤਾਰੀਫ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦੀ ਹੈ. ਇਹ ਖਾਸ ਤੌਰ 'ਤੇ ਦ੍ਰਿਸ਼ਾਂ ਵਿੱਚ ਪ੍ਰਭਾਵਸ਼ਾਲੀ ਹੈ ਜਿੱਥੇ ਮੈਮੋਰੀ ਪ੍ਰੈਸ਼ਰ ਗਤੀਸ਼ੀਲ ਰੂਪ ਵਿੱਚ ਬਦਲਦਾ ਹੈ. ਇਨ੍ਹਾਂ ਰਣਨੀਤੀਆਂ ਦੇ ਸੁਮੇਲ ਨੂੰ ਲਾਗੂ ਕਰਕੇ, ਜਾਵਾ ਅਰਜ਼ੀਆਂ ਬਹੁਤ ਪ੍ਰਭਾਵਸ਼ਾਲੀ object ਬਜੈਕਟ ਦੇ ਪ੍ਰਬੰਧਨ ਨੂੰ ਪ੍ਰਾਪਤ ਕਰ ਸਕਦੀਆਂ ਹਨ, ਘੱਟੋ ਘੱਟ ਕੂੜਾ ਕਰਕਟ ਇਕੱਠਾ ਕਰਨ ਅਤੇ ਰਨਟਾਈਮ ਪ੍ਰਦਰਸ਼ਨ ਨੂੰ ਵੱਧ ਤੋਂ ਵੱਧ ਕਰ ਸਕਦੀਆਂ ਹਨ. 🚀
ਜਾਵਾ ਵਿੱਚ ਪੂਲਿੰਗ ਦੇ ਆਬਜੈਕਟ ਬਾਰੇ ਮੁੱਖ ਪ੍ਰਸ਼ਨ
- ਆਬਜੈਕਟ ਜਾਵਾ ਐਪਲੀਕੇਸ਼ਨ ਦੀ ਕਾਰਗੁਜ਼ਾਰੀ ਨੂੰ ਕਿਵੇਂ ਸੁਧਾਰਦਾ ਹੈ?
- ਆਬਜੈਕਟ ਬਣਾਉਣਾ ਅਤੇ ਵਿਨਾਸ਼ ਨੂੰ ਘਟਾ ਕੇ, ਆਬਜੈਕਟ ਪੂਲਿੰਗ ਨੂੰ ਘੱਟ ਕਰਦਾ ਹੈ ਕੂੜਾ ਕਰਕਟ ਇਕੱਠਾ ਕਰਨਾ ਓਵਰਹੈੱਡ, ਬਿਹਤਰ ਮੈਮੋਰੀ ਕੁਸ਼ਲਤਾ ਅਤੇ ਕਾਰਜ ਨੂੰ ਜਵਾਬਦੇਹੀ ਵੱਲ ਲਿਜਾਂਦਾ ਹੈ.
- ਇੱਕ ਨਿਸ਼ਚਤ-ਅਕਾਰ ਅਤੇ ਆਰਜੀ ਤੌਰ ਤੇ ਸਕੇਲਬਲ ਆਬਜੈਕਟ ਪੂਲ ਵਿੱਚ ਕੀ ਅੰਤਰ ਹੈ?
- ਇੱਕ ਨਿਸ਼ਚਤ-ਅਕਾਰ ਦਾ ਪੂਲ ਆਬਜੈਕਟ ਨੂੰ ਨਿਭਾਉਂਦਾ ਹੈ ਅਤੇ ਇੱਕ ਸੈੱਟ ਨੰਬਰ ਕਾਇਮ ਰੱਖਦਾ ਹੈ, ਜਦੋਂ ਕਿ ਇੱਕ ਸਕੇਲੇਬਲ ਪੂਲ ਦੀ ਮੰਗ ਦੇ ਅਧਾਰ ਤੇ ਇਸਦੇ ਅਕਾਰ ਨੂੰ ਅਨੁਕੂਲ ਕਰਦਾ ਹੈ, ਬਿਹਤਰ ਸਰੋਤ ਪ੍ਰਬੰਧਨ ਨੂੰ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ.
- ਕਿਵੇਂ ਹੋ ਸਕਦਾ ਹੈ ThreadLocal ਆਬਜੈਕਟ ਪੂਲਿੰਗ ਲਈ ਵਰਤਿਆ ਜਾ ਸਕਦਾ ਹੈ?
- ThreadLocal ਪੂਲ ਪ੍ਰਤੀ-ਧਾਗੇ ਦੇ ਉਦਾਹਰਣਾਂ ਨੂੰ ਕਾਇਮ ਰੱਖਦੇ ਹਨ, ਬਹਿਸ ਨੂੰ ਘਟਾਉਂਦੇ ਹਨ ਅਤੇ ਉੱਚ-ਸਿੱਟੇ ਵਜੋਂ ਕਾਰਜਕੁਸ਼ਲਤਾ ਵਿੱਚ ਸੁਧਾਰ ਕਰਦੇ ਹਨ.
- ਕਿਉਂ ਅਟੱਲ ਚੀਜ਼ਾਂ ਜਿਵੇਂ String ਇੱਕ ਤਲਾਅ ਵਿੱਚ ਦੁਬਾਰਾ ਇਸਤੇਮਾਲ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ?
- ਕਿਉਂਕਿ String ਸ੍ਰਿਸ਼ਟੀ ਤੋਂ ਬਾਅਦ ਵਸਤੂਆਂ ਨੂੰ ਸੰਸ਼ੋਧਿਤ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ, ਉਨ੍ਹਾਂ ਨੂੰ ਪੂਲ ਕਰਨਾ ਕੋਈ ਵੀ ਪ੍ਰਦਰਸ਼ਨ ਲਾਭ ਪ੍ਰਦਾਨ ਨਹੀਂ ਕਰਦਾ. ਇਸ ਦੀ ਬਜਾਏ, ਦਖਲ ਦੇਣ ਜਾਂ ਕੈਚਿੰਗ ਵਿਧੀ ਦੀ ਵਰਤੋਂ ਕੀਤੀ ਜਾਣੀ ਚਾਹੀਦੀ ਹੈ.
- ਕੀ ਪੂਲਿੰਗ ਦੇ ਆਬਜ੍ਰੀ ਦੀਆਂ ਕਮੀਆਂ ਕੀ ਹਨ?
- ਜਦੋਂ ਕਿ ਆਬਜੈਕਟ ਪੂਲਿੰਗ ਮੈਮੋਰੀ ਕ੍ਰਿਸ਼ਨ ਨੂੰ ਘਟਾਉਂਦੀ ਹੈ, ਗਲਤ ਅਕਾਰ ਨੂੰ ਬਹੁਤ ਜ਼ਿਆਦਾ ਯਾਦਦਾਸ਼ਤ ਜਾਂ ਕਮਜ਼ੋਰ ਰੂਪ ਵਿੱਚ ਲਾਗੂ ਹੁੰਦਾ ਹੈ, ਜਿਵੇਂ ਕਿ ਕਾਰਜਾਂ ਦੇ ਕਾਰਜਾਂ ਨੂੰ ਨਕਾਰਾਤਮਕ ਤੌਰ ਤੇ ਪ੍ਰਭਾਵਤ ਕਰ ਸਕਦਾ ਹੈ.
ਆਬਜੈਕਟ ਦੀ ਮੁੜ ਵਰਤੋਂ ਨਾਲ ਜਾਵਾ ਪ੍ਰਦਰਸ਼ਨ ਨੂੰ ਵੱਧ ਤੋਂ ਵੱਧ ਕਰਨਾ
ਆਬਜੈਕਟ ਪੂਲਿੰਗ ਕੂੜੇ ਦੇ ਸੰਗ੍ਰਹਿ ਦੇ ਦਬਾਅ ਨੂੰ ਘੱਟ ਕਰਨ ਲਈ ਇਕ ਸ਼ਕਤੀਸ਼ਾਲੀ ਤਕਨੀਕ ਹੈ ਅਤੇ ਜਾਵਾ ਐਪਲੀਕੇਸ਼ਨਾਂ ਵਿਚ ਸਰੋਤ ਦੀ ਵਰਤੋਂ ਨੂੰ ਅਨੁਕੂਲਿਤ ਕਰਨ ਲਈ ਇਕ ਸ਼ਕਤੀਸ਼ਾਲੀ ਤਕਨੀਕ ਹੈ. ਧਿਆਨ ਨਾਲ ਇੱਕ ਕੁਸ਼ਲ, ਆਰਜੀ ਤੌਰ ਤੇ ਸਕੇਲੇਬਲ ਪੂਲ ਨੂੰ ਡਿਜ਼ਾਈਨ ਕਰਨ ਨਾਲ, ਡਿਵੈਲਪਰ ਕਾਰਜ ਜਵਾਬਦੇਹੀ ਅਤੇ ਮੈਮੋਰੀ ਕੁਸ਼ਲਤਾ ਵਿੱਚ ਸੁਧਾਰ ਕਰ ਸਕਦੇ ਹਨ. ਸੱਜੀ ਪਹੁੰਚ ਇਹ ਸੁਨਿਸ਼ਚਿਤ ਕਰਦੀ ਹੈ ਕਿ ਆਬਜੈਕਟ ਅਲਾਟਮੈਂਟ ਅਤੇ ਵਰਤੋਂ ਅਤੇ ਮੁੜ ਵਰਤੋਂ ਨੂੰ ਸਹਿਜਤਾ ਨਾਲ ਸੰਭਾਲਿਆ ਜਾਂਦਾ ਹੈ, ਇੱਥੋਂ ਤਕ ਕਿ ਭੜਕਾਉਣ ਵਾਲੇ ਕੰਮ ਦੇ ਭਾਰ ਹੇਠ.
ਜਦੋਂ ਕਿ ਆਬਜੈਕਟ ਪੂਲਿੰਗ ਲਾਭ ਟੁੱਟਣ ਵਾਲੀਆਂ ਚੀਜ਼ਾਂ, ਅਟੱਲ ਚੀਜ਼ਾਂ ਨੂੰ ਸੰਭਾਲਣਾ ਪਸੰਦ ਕਰਦਾ ਹੈ ਸਤਰ ਬਦਲ ਜਾਂ ਕੈਚਿੰਗ ਵਰਗੀਆਂ ਵਿਕਲਪਕ ਰਣਨੀਤੀਆਂ ਦੀ ਜ਼ਰੂਰਤ ਹੈ. ਪੂਲ ਦਾ ਆਕਾਰ ਸੰਤੁਲਨ ਕਰਨਾ, ਬਹੁਤ ਜ਼ਿਆਦਾ ਪ੍ਰੀਲੋਕੇਸ਼ਨ ਤੋਂ ਪਰਹੇਜ਼ ਕਰਨਾ, ਅਤੇ ਵਧੀਆ ਲਾਗੂ ਕਰਨ ਦੀ ਰਣਨੀਤੀ ਚੁਣਨਾ ਪੀਕ ਦੇ ਪ੍ਰਦਰਸ਼ਨ ਨੂੰ ਪ੍ਰਾਪਤ ਕਰਨ ਦੇ ਮੁੱਖ ਕਾਰਕ ਹਨ. ਸਹੀ ਸੈਟਅਪ ਦੇ ਨਾਲ, ਜਾਵਾ ਐਪਲੀਕੇਸ਼ਨਾਂ ਘੱਟੋ ਘੱਟ ਮੈਮੋਰੀ ਬਰਬਾਦੀ ਦੇ ਨਾਲ ਅਸਾਨੀ ਨਾਲ ਚੱਲ ਸਕਦੀ ਹੈ. ⚡
ਭਰੋਸੇਯੋਗ ਸਰੋਤ ਅਤੇ ਹਵਾਲੇ
- ਜਾਵਾ ਆਬਜੈਕਟ ਪੂਲਿੰਗ ਰਣਨੀਤੀਆਂ 'ਤੇ ਵਿਆਪਕ ਗਾਈਡ: ਬੈਰਡੰਗ
- ਜਾਵਾ ਮੈਮੋਰੀ ਮੈਨੇਜਮੈਂਟ ਅਤੇ ਕੂੜਾ ਇਕੱਠਾ ਕਰਨ ਲਈ ਓਰੇਕਲ ਦੇ ਅਧਿਕਾਰਤ ਦਸਤਾਵੇਜ਼: ਓਰੇਕਲ ਡੌਕਸ
- ਜਾਵਾ ਐਪਲੀਕੇਸ਼ਨਾਂ ਵਿੱਚ ਜੀਸੀ ਪ੍ਰਭਾਵ ਨੂੰ ਘੱਟ ਕਰਨ ਲਈ ਪ੍ਰਭਾਵਸ਼ਾਲੀ ਤਕਨੀਕਾਂ: ਜੈਟਬ੍ਰੇਨ ਬਲਾੱਗ
- ਜਾਵਾ ਵਿੱਚ ਆਬਜੈਕਟ ਦੀ ਮੁੜ ਵਰਤੋਂ ਅਤੇ ਪ੍ਰਦਰਸ਼ਨ ਨੂੰ ਅਨੁਕੂਲ ਬਣਾਉਣ ਲਈ ਸਭ ਤੋਂ ਵਧੀਆ ਅਭਿਆਸ: ਜਾਣਕਾਰੀ